#include?stdio.h
為信州等地區(qū)用戶(hù)提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及信州網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站制作、信州網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專(zhuān)業(yè)、用心的態(tài)度為用戶(hù)提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶(hù)的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!
#include?stdlib.h
#include?malloc.h
void?MatrixOpp(double?*A,?int?m,?int?n,?double*?invmat);
void?MatrixInver(double?*A,?int?m,?int?n,?double*?invmat);
double?Surplus(double?A[],?int?m,?int?n);
int?matrix_inv(double*?p,?int?num,?double*?invmat);
void?MatrixOpp(double?A[],?int?m,?int?n,?double*?invmat)
{
int?i,?j,?x,?y,?k;
double?*SP?=?NULL,?*AB?=?NULL,?*B?=?NULL,?X;
SP?=?(double?*)?malloc(m?*?n?*?sizeof(double));
AB?=?(double?*)?malloc(m?*?n?*?sizeof(double));
B?=?(double?*)?malloc(m?*?n?*?sizeof(double));
X?=?Surplus(A,?m,?n);
X?=?1?/?X;
for?(i?=?0;?i??m;?i++)
for?(j?=?0;?j??n;?j++)
{
for?(k?=?0;?k??m?*?n;?k++)
B[k]?=?A[k];
{
for?(x?=?0;?x??n;?x++)
B[i?*?n?+?x]?=?0;
for?(y?=?0;?y??m;?y++)
B[m?*?y?+?j]?=?0;
B[i?*?n?+?j]?=?1;
SP[i?*?n?+?j]?=?Surplus(B,?m,?n);
AB[i?*?n?+?j]?=?X?*?SP[i?*?n?+?j];
}
}
MatrixInver(AB,?m,?n,?invmat);
free(SP);
free(AB);
free(B);
}
void?MatrixInver(double?A[],?int?m,?int?n,?double*?invmat)
{
int?i,?j;
double?*B?=?invmat;
for?(i?=?0;?i??n;?i++)
for?(j?=?0;?j??m;?j++)
B[i?*?m?+?j]?=?A[j?*?n?+?i];
}
double?Surplus(double?A[],?int?m,?int?n)
{
int?i,?j,?k,?p,?r;
double?X,?temp?=?1,?temp1?=?1,?s?=?0,?s1?=?0;
if?(n?==?2)
{
for?(i?=?0;?i??m;?i++)
for?(j?=?0;?j??n;?j++)
if?((i?+?j)?%?2)
temp1?*=?A[i?*?n?+?j];
else
temp?*=?A[i?*?n?+?j];
X?=?temp?-?temp1;
}
else
{
for?(k?=?0;?k??n;?k++)
{
for?(i?=?0,?j?=?k;?i??m,?j??n;?i++,?j++)
temp?*=?A[i?*?n?+?j];
if?(m?-?i)
{
for?(p?=?m?-?i,?r?=?m?-?1;?p??0;?p--,?r--)
temp?*=?A[r?*?n?+?p?-?1];
}
s?+=?temp;
temp?=?1;
}
for?(k?=?n?-?1;?k?=?0;?k--)
{
for?(i?=?0,?j?=?k;?i??m,?j?=?0;?i++,?j--)
temp1?*=?A[i?*?n?+?j];
if?(m?-?i)
{
for?(p?=?m?-?1,?r?=?i;?r??m;?p--,?r++)
temp1?*=?A[r?*?n?+?p];
}
s1?+=?temp1;
temp1?=?1;
}
X?=?s?-?s1;
}
return?X;
}
int?matrix_inv(double*?p,?int?num,?double*?invmat)
{
if?(p?==?NULL?||?invmat?==?NULL)
{
return?1;
}
if?(num??10)
{
return?2;
}
MatrixOpp(p,?num,?num,?invmat);
return?0;
}
int?main()
{
int?i,?j;
int?num;
double?*arr=NULL;
double?*result=NULL;
int?flag;
printf("請(qǐng)輸入矩陣維數(shù):\n");
scanf("%d",num);
arr=(double?*)malloc(sizeof(double)*num*num);
result=(double?*)malloc(sizeof(double)*num*num);
printf("請(qǐng)輸入%d*%d矩陣:\n",?num,?num);
for?(i?=?0;?i??num;?i++)
{
for?(j?=?0;?j??num;?j++)
{
scanf("%lf",?arr[i?*?num?+?j]);
}
}
flag?=?matrix_inv(arr,?num,?result);
if(flag==0)
{
printf("逆矩陣為:\n");
for?(i?=?0;?i??num?*?num;?i++)
{
printf("%lf\t?",?*(result?+?i));
if?(i?%?num?==?(num?-?1))
printf("\n");
}
}
else?if(flag==1)
{
printf("p/q為空\(chéng)n");
}
else
{
printf("超過(guò)最大維數(shù)\n");
}
system("PAUSE");
free(arr);
free(result);
return?0;
}
例如要使用cos的反函數(shù)arccos,C語(yǔ)言里有acos()函數(shù),在頭文件math.h里。
1、C語(yǔ)言中,數(shù)學(xué)函數(shù)是函數(shù)的一種。指專(zhuān)門(mén)進(jìn)行數(shù)學(xué)運(yùn)算的函數(shù),一般都在math.h頭文件下。如果該標(biāo)準(zhǔn)庫(kù)內(nèi)存在某個(gè)函數(shù)的反函數(shù),直接調(diào)用該反函數(shù)即可計(jì)算。
2、數(shù)學(xué)函數(shù)列表:
1)int abs(int i); 求整數(shù)的絕對(duì)值。
2)long labs(long n); 求長(zhǎng)整型數(shù)的絕對(duì)值。
3)double fabs(double x); 求實(shí)數(shù)的絕對(duì)值。
4)double floor(double x); 求不大于x的最大整數(shù),它相當(dāng)于數(shù)學(xué)函數(shù)[x]。
擴(kuò)展資料:
語(yǔ)言組成:基本構(gòu)成。
數(shù)據(jù)類(lèi)型:C的數(shù)據(jù)類(lèi)型包括:整型、字符型、實(shí)型或浮點(diǎn)型(單精度和雙精度)、枚舉類(lèi)型、數(shù)組類(lèi)型、結(jié)構(gòu)體類(lèi)型、共用體類(lèi)型、指針類(lèi)型和空類(lèi)型。
常量與變量:常量其值不可改變,符號(hào)常量名通常用大寫(xiě)。
變量是以某標(biāo)識(shí)符為名字,其值可以改變的量。標(biāo)識(shí)符是以字母或下劃線(xiàn)開(kāi)頭的一串由字母、數(shù)字或下劃線(xiàn)構(gòu)成的序列,請(qǐng)注意第一個(gè)字符必須為字母或下劃線(xiàn),否則為不合法的變量名。變量在編譯時(shí)為其分配相應(yīng)存儲(chǔ)單元。
數(shù)組:如果一個(gè)變量名后面跟著一個(gè)有數(shù)字的中括號(hào),這個(gè)聲明就是數(shù)組聲明。字符串也是一種數(shù)組。它們以ASCII的NULL作為數(shù)組的結(jié)束。要特別注意的是,中括號(hào)內(nèi)的索引值是從0算起的。
參考資料來(lái)源:百度百科-c語(yǔ)言
//源程序如下#includestdio.h
#includeconio.h
#includestring.h
#includeiostream.h
#includestdlib.h
#includemath.h
#define max 100void inputstyle(int *); //輸入函數(shù)
void input(int **,int); //輸入函數(shù)
long danx(int **,int);
int sgnx(int);
void martx(int **,int);int main(void)
{
int style=0,i=0;
int matrix[max][max],*p[max];
for(i=0;imax;i++)*(p+i)=matrix[i]; //*(p+i)是指針,指向第i個(gè)字符串
char exit1=' ';
while(exit1!='E' exit1!='e'){ printf("求n階矩陣的逆\n"); inputstyle(style);
input(p,style);
printf("原矩陣為:\n");
for(i=0;istyle;i++){
for(int j=0;jstyle;j++){
printf("%4d",matrix[i][j]);
}
printf("\n");
}
martx(p,style);
printf("\n");
printf("Exit=e Continue=Press any key\n");
cinexit1;
fflush(stdin);
printf("\n\n"); }
return(0);
} void input(int **p,int n){
for(int i=0;in;i++){
for(int j=0;jn;j++){
printf("輸入矩陣(%d行,%d列)元素:",j+1,i+1);
*(*(p+j)+i)=0;
scanf("%d",*(p+j)+i);
fflush(stdin);
}
}
}void inputstyle(int *style){
do{
printf("輸入矩陣n*n階數(shù)n(0n%d):",max);
fflush(stdin);
scanf("%d",style);
fflush(stdin);
}while(*style=0 *stylemax);
}long danx(int **p,int n){
int i=0,j1=0,k1=0,j2=0,k2=0;
long sum=0;
int operate[max][max],*po[max];
for(i=0;imax;i++)*(po+i)=operate[i]; if(n==1)return *(*(p+0)+0);
else{
for(i=0;in;i++){
for(j1=1,j2=0;j1n;j1++,j2++){
k1=-1;k2=-1;
while(k2n-1){
k1++;
k2++;
if(k1==i)k1++;
*(*(po+j2)+k2)=*(*(p+j1)+k1);
}
}
/*for(int i1=0;i1n-1;i1++){
for(int h1=0;h1n-1;h1++){
printf("(%d,%d)%d ",i1,h1,*(*(po+h1)+i1));
}
printf("\n");
}*/
sum+=*(*(p+0)+i) * sgnx(1+i+1) * danx(po,n-1);
}
return sum;
}
}int sgnx(int i){
if(i%2==0)return(1);
else return(-1);
}void martx(int **p,int n){
int i=0,j=0,j1=0,k1=0,j2=0,k2=0,num=0;
int tramform[max][max];
int operate[max][max],*po[max];
for(i=0;imax;i++)*(po+i)=operate[i];
num=danx(p,n);
if(num==0)printf("矩陣不可逆\n");
else{
if(n==1)printf("矩陣的逆為: 1/%d\n",num);
else{
printf("矩陣的逆為: 系數(shù) 1/%d *\n",num);
for(i=0;in;i++){
for(j=0;jn;j++){
j1=-1;j2=-1;
while(j2n-1){
j1++;j2++;
if(j1==j)j1++; k1=-1;k2=-1;
while(k2n-1){
k1++;
k2++;
if(k1==i)k1++;
*(*(po+j2)+k2)=*(*(p+j1)+k1);
}
}
tramform[i][j]=sgnx(2+i+j) * danx(po,n-1);
}
}
for(i=0;in;i++){
for(j=0;jn;j++){
printf("%4d",tramform[i][j]);
}
printf("\n");
}
}
}
}
//運(yùn)行結(jié)果//希望對(duì)你有幫助
網(wǎng)頁(yè)題目:c語(yǔ)言有沒(méi)有求逆函數(shù) c語(yǔ)言求逆矩陣的思路
當(dāng)前鏈接:http://jinyejixie.com/article46/doppheg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、小程序開(kāi)發(fā)、網(wǎng)站建設(shè)、、品牌網(wǎng)站設(shè)計(jì)、電子商務(wù)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)