数值分析上机实验C语言程序求助

数值分析上机实验C语言程序求助,第1张

#include <stdio.h>山尘

#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


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8238928.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-14
下一篇2023-04-14

发表评论

登录后才能评论

评论列表(0条)

    保存