计算方法-实习1Word文件下载.docx
《计算方法-实习1Word文件下载.docx》由会员分享,可在线阅读,更多相关《计算方法-实习1Word文件下载.docx(3页珍藏版)》请在冰豆网上搜索。
9
y
0.898
2.38
3.07
1.84
2.02
1.94
2.22
2.77
4.02
10
11
12
13
14
15
16
17
18
19
4.76
5.46
6.53
10.9
16.5
22.5
35.7
50.6
61.6
81.8
二、解题的主要思想
本题采用的是最小二乘法原理对一系列的数据进行拟合,但由于此题若将其化为线性方程求解会造成均方误差较大,因此采用非线性方法求解。
由于所求得的非线性方程较为复杂,求导困难,可采用弦割法求解。
三、计算结果
a=0.236882,b=0.308978
s=8.655291,max=3.125623
其中s为均方误差,max为最大偏差
四、结果分析
从本次实习结果可以看出,本组数据进行指数型拟合效果并不是很好,其均方误差达8.655291,但从计算方法角度看,采用解非线性方程的方法在一定程度上提高了曲线的拟合程度。
虽然如此,在求解非线性方程组是由于弦割法本身存在精度不够高的缺点,只是结果精度也不够高,但相比于将非线性方程转化为线性方程的方法,无论是均方差还是最大偏差,其都有很大的改善。
因此,本次计算结果能符合要求。
五、源程序
#include<
stdio.h>
stdlib.h>
math.h>
intmain(void){
doublex[19],y[19],a,b,m,n,c,d,s,max,s1[19],tm,tn,m1,n1,h1,k1,l1;
inti,j;
FILE*fp1,*fp2;
doublet(doubleg,doublex[],doubley[]);
if((fp1=fopen("
f.txt"
"
r+"
))==NULL){
printf("
Fileopenerror!
\n"
);
return0;
}
if((fp2=fopen("
f2.txt"
w+"
i=0;
while(!
feof(fp1)){
fscanf(fp1,"
%lf"
&
x[i]);
y[i]);
i++;
printf("
Entertwonumber:
scanf("
%lf%lf"
m,&
n);
while(fabs(m-n)>
0.00001){
b=m-t(m,x,y)*(m-n)/(t(m,x,y)-t(n,x,y));
n=m;
m=b;
c=d=0;
for(i=0;
i<
=18;
i++){
c=c+y[i]*exp(m*x[i]);
d=d+exp(m*x[i]*2);
a=c/d;
fprintf(fp2,"
a=%f,b=%f\n"
a,m);
s=0;
s1[i]=a*exp(m*x[i])-y[i];
s=s+s1[i]*s1[i];
max=s1[0];
for(i=1;
i++)
if(s1[i]>
max)
max=s1[i];
s=sqrt(s);
s=%f,max=%f\n"
s,max);
if(fclose(fp1)){
printf("
Cannotclosethefile!
return0;
if(fclose(fp2)){
return0;
}
doublet(doubleg,doublex[],doubley[])
{
inti;
doublem,n,h,l,k,r;
m=h=l=k=0;
for(i=0;
n=exp(g*x[i]);
m=m+n*y[i];
h=h+x[i]*n*n;
l=l+x[i]*y[i]*n;
k=k+n*n;
}
r=m*h/k-l;
returnr;