#ifdef _DEBUG
#define new DEBUG_NEW
#endif
#define a1 8.37304456 /*理想項系數*//*引數宏定義*/
#define a2 -3.70454304
#define a3 2.5000
#define a4 1.99427042
#define a5 0.62105248
#define a6 0.41195293
#define a7 1.04028922
#define a8 0.08327678
#define b4 3.15163
#define b5 6.11190
#define b6 6.77708
#define b7 11.32384
#define b8 27.08792
/**思路:定義全域陣列,數值計算全部回傳陣列中,主函式中匯入txt文本中
宣告:w=無量綱密度,y=無量綱溫度.此函式w,y均取1-50,變化量為1,所以偏導數計算結果相同(w,y變化需要重新編輯差分函式) **/
float lx[50]; /*陣列的全域定義*/
float cy[50];
float hmhz[50];
float ca[50];
float cb[50];
float cc[50];
float cd[50];
float ce[50];
float cf[50];
float cg[50];
float P[50];
float s[50];
float u[50];
float cr[50];
float h[50];
void hmhzlx(); /*函式頭定義*/
void hmhzcy();
void hm();
float dchafen();
float schafen();
void piandao();
void shuchu();
void main() /*主函式*/
{
hmhzlx(); /*執行程式*/
hmhzcy();
hm();
piandao();
shuchu();
FILE *fa, *fb, *fc, *fd, *fe, *ff, *fg, *fh, *fi, *fj, *fk, *fl, *fm, *fn,*fo; /*輸出陣列到txt文本中*/
fa = fopen("C:\\Users\\acer\\Docktop\\jieguo\\lx.txt", "wb");
fb = fopen("C:\\Users\\acer\\Docktop\\jieguo\\cy.txt", "wb");
fc = fopen("C:\\Users\\acer\\Docktop\\jieguo\\hmhz.txt", "wb");
fd = fopen("C:\\Users\\acer\\Docktop\\jieguo\\piandao\\a.txt", "wb");
fe = fopen("C:\\Users\\acer\\Docktop\\jieguo\\piandap\\b.txt", "wb");
ff = fopen("C:\\Users\\acer\\Docktop\\jieguo\\piandao\\c.txt", "wb");
fg = fopen("C:\\Users\\acer\\Docktop\\jieguo\\piandao\\d.txt", "wb");
fh = fopen("C:\\Users\\acer\\Docktop\\jieguo\\piandao\\e.txt", "wb");
fi = fopen("C:\\Users\\acer\\Docktop\\jieguo\\piandao\\f.txt", "wb");
fj = fopen("C:\\Users\\acer\\Docktop\\jieguo\\piandao\\g.txt", "wb");
fk = fopen("C:\\Users\\acer\\Docktop\\jieguo\\P.txt", "wb");
fl = fopen("C:\\Users\\acer\\Docktop\\jieguo\\s.txt", "wb");
fm = fopen("C:\\Users\\acer\\Docktop\\jieguo\\u.txt", "wb");
fn = fopen("C:\\Users\\acer\\Docktop\\jieguo\\cr.txt", "wb");
fo = fopen("C:\\Users\\acer\\Docktop\\jieguo\\h.txt", "wb");
int i;
for (i = 0; i < 50; i++)
{
printf("%f %f %f %f %f %f %f %f %f %f %f %f %f %f %f\n ", lx[i], cy[i], hmhz[i], ca[i], cb[i], cc[i], cd[i], ce[i], cf[i], cg[i], P[i], s[i], u[i], cr[i], h[i]);
fprintf(fa, "%f\n", lx[i]);
fprintf(fb, "%f\n", cy[i]);
fprintf(fc, "%f\n", hmhz[i]);
fprintf(fd, "%f\n", ca[i]);
fprintf(fe, "%f\n", cb[i]);
fprintf(ff, "%f\n", cc[i]);
fprintf(fg, "%f\n", cd[i]);
fprintf(fh, "%f\n", ce[i]);
fprintf(fi, "%f\n", cf[i]);
fprintf(fj, "%f\n", cg[i]);
fprintf(fk, "%f\n", P[i]);
fprintf(fl, "%f\n", s[i]);
fprintf(fm, "%f\n", u[i]);
fprintf(fn, "%f\n", cr[i]);
fprintf(fo, "%f\n", h[i]);
}
fclose(fa);
fclose(fb);
fclose(fc);
fclose(fd);
fclose(fe);
fclose(ff);
fclose(fg);
fclose(fh);
fclose(fi);
fclose(fj);
fclose(fk);
fclose(fl);
fclose(fm);
fclose(fn);
fclose(fo);
}
void hmhzlx()
{
float w = 1, y = 1;
int i;
for (i = 0; i < 50; i++)
{
lx[i]=log(w)+a1+ (2 * y) +( a3 * log(y)) +( a4 * log(1 - exp(-y * b4))) + (a5 * log(1 - exp(-y * b5))) + (a6 * log(1 - exp(-y * b6))) +( a7 * log(1 - exp(-y * b7))) +( a8 * log(1 - exp(-y * b8)));
w++;
y++;
}
}
void hmlxcy()
{
float n[42] = { 0.38856823203161e0,0.29385475942740e1,-0.55867188534934e0,-0.76753199592477e0,0.31729005580416e0,0.54803315897767e0,0.12279411220335e0,0.21658961543220e1,0.15841735109724e1,-0.23132705405503e0,0.5811691643146e-1,-0.55369137205382e0,0.48946615909422e0,-0.24275739843501e-1,0.62494790501e-1,-0.12175860225246e0,-0.37055685270086e0,-0.16775879700426e-1,-0.11960736637987e0,-0.45619362508778e-1,0.35612789270346e-1,-0.74427727132052e-2,-0.17395704902432e-2,-0.21810121289527e-1,0.24332166559236e-1,-0.37440133423463e-1,0.14338715756878e0,-0.13491969083286,-0.23151225053480e-1,0.12363125492901e-1,0.21058321970940e-2,-0.3358519026368e-3,0.55993651771592e-2,-0.30335118055646e-3,-0.21365488688320e3,0.26641569149272e5,-0.24027212204557e5,-0.28341603423999e3,0.2124728440017e3,-0.66642276540751e0,0.72608632349897e0,0.55068668612842e-1 };
float d[39] = { 1,1,1,1,2,2,3,1,2,4,5,5,5,6,6,6,1,1,4,4,4,7,8,2,3,3,5,5,6,7,8,10,4,8,2,2,2,3,3 };
float t[39] = { 0,0.75,1,2,0.75,2,0.75,1.5,1.5,2.5,0,1.5,2,0,1,2,3,6,3,6,8,6,0,7,12,16,22,24,16,24,8,2,28,14,1,0,1,3,3 };
float c[27] = { 1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,3,3,3,4,4,4,4,4,4,5,6 };
float alpha[5] = { 25,25,25,25,20 };
float beta[8] = { 325,300,300,275,275,0.3,0.3,0.3 };
float gamma[5] = { 1.16,1.19,1.19,1.25,1.22 };
float segema[5] = { 1,1,1,1,1 };
float a[3] = { 3.5,3.5,3.5 };
float b[3] = { 0.875,0.925,0.875 };
float A[3] = { 0.7,0.7,0.7 };
float B[3] = { 0.3,0.3,1 };
float C[3] = { 10,10,12.5 };
float D[3] = { 275,275,275 };
float w = 1;
float y = 1;
int i, j;
for (i = 0; i < 50; i = i++)
{
for (j = 0; j < 7; j++)
{
cy[i] = cy[i] +pow(n[j]*w,pow(d[j]*y,t[j]));
}
for (j = 8; j < 35; j++)
{
cy[i] = cy[i] + n[j] *pow( w,(d[i - 8]))*pow(y, t[i - 8])*exp(-exp(pow(w,c[j-8])));
}
for (j = 35; j < 40; j++)
{
cy[i] = cy[i] + n[j] * pow(pow(w,d[i-8]*y), t[i - 8])*exp(-alpha[j - 35]);
}
for (j = 39; j < 42; j++)
{
cy[i] = cy[i] + n[j] * a[j - 39];
}
w++;
y++;
}
}
void hm()
{
int i;
for (i = 0; i < 50; i++)
{
hmhz[i] = lx[i] + cy[i];
}
}
float dchafen(int t[], int v[]) /*此函式中,呼叫全域定義函式計算偏導數,回傳O*/
{
int i;
v[0] = (t[1] - t[0] / (1 - 0)); /*首項前插*/
v[49] = (t[49] - t[48]) / (49 - 48); /*尾項后插*/
for (i = 1; i < 49; i++)
{
v[i] = (t[i + 1] - t[i - 1]) / 2 * 1; /*中心差分*/
}
return 0;
}
float schafen(int t[50], int v[50])
{
int i;
float u1, u0;
u1 = (t[2] - t[0]) / 2;
u0 = (t[1] - t[0]) / 1;
v[0] = (u1 - u0) / 1; /*首項二階向前差分*/
float u49, u48;
u49 = (t[49] - t[48]) / 1;
u48 = (t[49] - t[47]) / 2;
v[49] = u49 - u48; /*尾項二階向后差分*/
for (i = 1; i < 49; i++)
{
v[i] = (t[i + 1] - 2 * t[i] + t[i - 1]) / 1;
}
return 0;
}
void piandao()
{
(int) lx[50];
(int) cy[50];
(int) hmhz[50];
(int) ca[50];
(int) cb[50];
(int) cc[50];
(int) cd[50];
(int) ce[50];
(int) cf[50];
(int) cg[50];
dchafen(lx[50], ca[50]); /*理想項對w一階偏導*/
dchafen(lx[50], cb[50]); /*理想項對y一階偏導*/
dchafen(cy[50], cc[50]); /*殘余項對w一階偏導*/
dchafen(cy[50], cd[50]); /*殘余項對y一階偏導*/
schafen(lx[50], ce[50]); /*理想項對y二階偏導*/
schafen(cy[50], cf[50]); /*殘余項對w二階偏導*/
schafen(cy[50], cg[50]); /*殘余項對y二階偏導*/
}
void shuchu()
{
int i;
int w=1, y=1;
for (i = 0; i < 50; i++)
{
P[i] = 1 + w * cc[i];
s[i] = y * (cb[i] + cd[i]);
u[i] = y * (cb[i] + cd[i]);
cr[i] = -y*y*(cb[i] + cd[i]);
h[i] = 1 + y * (cb[i] + cd[i]) + w * cc[i];
w++;
y++;
}
}
uj5u.com熱心網友回復:
把所有的float都換成double就不會出這個錯誤了。uj5u.com熱心網友回復:
還是不行,是不是我這個函式結構有問題呀uj5u.com熱心網友回復:
還是不行,是不是我的函式結構有問題呀uj5u.com熱心網友回復:
還是不行是肯定的,問題是還出這個錯誤?uj5u.com熱心網友回復:
嗯,還是這個問題uj5u.com熱心網友回復:
我不信,你看著辦。uj5u.com熱心網友回復:
函式的宣告和定義與函式的呼叫不一致。比如dchafen(lx[50], ca[50]); //呼叫
float dchafen(int t[], int v[]);//宣告
引數是 陣列,而你傳給他一個整數,如何能夠不出錯?
建議把c的語法學好
uj5u.com熱心網友回復:
這個是后面修改過的,謝謝提醒
uj5u.com熱心網友回復:
謝謝啦uj5u.com熱心網友回復:
還缺少頭檔案
敲錯函式名
多余的回傳值
兩個差分函式的引數應為double陣列
(int)那些行都是多余的
等
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/251093.html
標籤:C語言
上一篇:各位大佬求助
下一篇:揭開記憶體的秘密,讓一切真相大白
