
#include <math.h>
int main(int argc,char* argv[])
{
double x1 = 1.9
double x0 = 0.1
double temp = 0.0
while(fabs(x0-x1) >0.00001)
{
x0 = x1
temp = x0*x0*x0
x1 =x0-( 7*temp*temp*x0-28*temp*x0+14)/逗碧禅慧岁(7*temp*temp-112*temp)
}
printf("x = %f",x1)
return 0
}
#include <stdio.h>#include <stdlib.h>
#include <math.h>
int main()
{
int i,cc
double h,epsilon,ma,mb,mc,mm,yfa,yfb,xx,y0,yf,panduan
double yy[11]
h=0.1
cc=0
epsilon=0.0002
ma=5mm=ma
y0=1yf=exp(1)
yy[0]=y0
do
{
yy[1]=h*mm+yy[0]
for(i=2i<培纯=10i++)
{
xx=i*h
yy[i]=2*yy[i-1]-yy[i-2]+pow(h, 2)*((2+9*xx)*yy[i-1]-(1+9*xx)*exp(xx))
}
panduan=(yy[10]-yf)*(yy[10]-yf)-epsilon*epsilon
if(panduan>0&&cc==0)
{
yfa=yy[10]
mb=yf*ma/yfa
mm=mb
}
else
{
yfb=yy[10]
mc=ma+(mb-ma)*(yf-yfa)/(yfb-yfa)
mm=mc
ma=mbyfa=yfb
}
cc=cc+1
}
while(panduan>0)
printf("%f\n",yy[0])
printf("%f\n",yy[1])
printf("%f\n",yy[2])
printf("%f\n",yy[3])
printf("%f\n",yy[4])
printf("%f\磨中者n",yy[5])
printf("%f\n",yy[6])
printf("%f\n",yy[7])
printf("%f\n",yy[8])
printf("瞎薯%f\n",yy[9])
printf("%f\n",yy[10])
printf("%d\n",cc)
printf("%f\n",panduan)
system("PAUSE")
return 0
}
最简单的一个打靶法程序,计算y''=-(2+9x)y=-(1+9x)e^x,y(0)=1,y(1)=e
(1)n个节点lagrange插值多项式程序function yy=lagrange(x1,y1,xx)
%本程序为Lagrange1插值,其中x1,y1
%为插值节点和节点上的函数值,输出为插值点xx的函数值,
%xx可以是向量。
syms x
n=length(x1)
for i=1:n
t=x1t(i)=[]L(i)=prod((x-t)./(x1(i)-t))% L向量用来存放插值基函数
end
u=sum(L.*y1)
p=simplify(u) % p是简化后的Lagrange插值函数(字符串)
yy=subs(p,x,xx)
clf
plot(x1,y1,'ro',xx,yy,'*'猜粗)
========
命令窗口命令及结果
format long g
>>lagrange([11 12],[0.190809 0.207912],11.5)
p =
(616200515415341*x)/36028797018963968 + 96413060822745/36028797018963968
ans =
0.1993605
>>lagrange([11 12 13],[0.190809 0.207912 0.224951],11.5)
p =
- (1152921504607*x^2)/察兆乱36028797018963968 + (321358855010651*x)/18014398509481984 - 55772577785379/36028797018963968
ans =
0.1993685
>>sin(11.5*pi/180)
ans = 0.199367934417197
(2)
function f = Newton(x,y,x0)
%本程序为Newton插值,其中x,y
%为插值节点和节点上的函数值,输出为插值点x0的函数值,
%x0可以是向量。
syms t
if(length(x) == length(y))
n = length(x)
c(1:n) = 0.0
else
disp('x和y的维数不相等!')
return
end
f = y(1)
y1 = 0
l = 1
for(i=1:n-1)
for(j=i+1:n)
y1(j) = (y(j)-y(i))/(x(j)-x(i))
end
c(i) = y1(i+1)
l = l*(t-x(i))
f = f + c(i)*l
simplify(f)
y = y1
if(i==n-1)
if(nargin == 3)
f = subs(f,'t',x0)
else
f = collect(f) %将插值多项式展开
f = vpa(f, 6)
end
end
end
==========
fn=Newton([11 12],[0.190809 0.207912],11.5)
ans =
(616200515415341*t)/36028797018963968 + 96413060822745/36028797018963968
fn =
0.1993605
>>fn=Newton([11 12 13],[0.190809 0.207912 0.224951],11.5)
ans =
(616200515415341*t)/36028797018963968 + 96413060822745/36028797018963968
ans =
- (1152921504607*t^2)/36028797018963968 + (321358855010651*t)/败档18014398509481984 - 55772577785379/36028797018963968
fn =
0.1993685
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)