% Lagrange插值
clear
clc
%-----------------------------
n=10; %结点个数
lb=-1; %下界
ub=1; %上界
step=0.01; %作图点步长
%-----------------------------
% 原始函数图形
x0=lb:step:ub;
y0=1./(1+25*x0.^2);
plot(x0,y0,'r-');
hold on
%-----------------------------
% 插值函数
for i=1:n+1
xi(i)=lb+(ub-lb)*(i-1)/n;
yi(i)=1/(1+25*xi(i)^2);
end
%------------------------------
count=1;
for x=lb:step:ub
fl=0;
%--------------------------
%求出pn(xk)
for k=1:n+1
up=1;
dn=1;
%----------------------
%求出f(xk)
for i=1:n+1
if k~=i
up=up*(x-xi(i));
dn=dn*(xi(k)-xi(i));
end
end
%----------------------
fl=fl+yi(k)*up/dn;
end
pn(count)=fl;
%--------------------------
fi(count)=1/(1+25*x^2);%求原函数的值
count=count+1;
end
%------------------------------
% L插值函数图
x=lb:step:ub;
plot(x,pn,'g--')
%------------------------------
num=(ub-lb)/step+1;
for i=1:num
p_f(i)=pn(i)-fi(i);
end
center=fix(num/2);
scale=fix(num/10);
a=center-scale;
b=center+scale;
disp ' pn(i)-fi(i) 的值为:'
p_f(a:b)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear all
clc
%Newton迭代法求解极小值点
%=====================================
disp '几点说明:'
disp '1.程序中的函数采用课本P102例3.3.2。'
disp '2.只需改变所需要求的函数和初始点的值。'
disp '==================================================='
%=====================================
%定义函数
disp '函数 f(x) 为:'
syms x1 x2
f=(x1-2)^4+(x1-2)^2*x2^2+(x2+1)^2
disp '初始点的值:'
x0=[1;1]
%=====================================
%求函数的梯度和海色阵
disp '函数f的梯度:'
g=jacobian(f,[x1;x2])
disp '函数f的Hesse矩阵:'
G=jacobian([g(1);g(2)],[x1,x2])
%=====================================
%定义迭代的最大次数
n=10;
%=====================================
%一些初始值的计算
g0=subs(g,{x1,x2},{x0(1),x0(2)})';
G0=subs(G,{x1,x2},{x0(1),x0(2)});
f0=subs(f,{x1,x2},{x0(1),x0(2)});
%=====================================
%迭代点集合 x和函数值F的初始化
x=zeros(2,n);
F=zeros(1,n);
%运用Newton方程解出下一近似值
x(:,1)=x0-inv(G0)*g0; %注:用点乘有误
A=x(:,1);
F(1)=subs(f,{x1,x2},{A(1),A(2)});
%=====================================
%定义误差初始值为1
deta=1;
i=1;
%循环用求出的近似解迭代Newton方程
%求出下一个近似解,并在规定的误差范围内
while deta>=1e-10&i
gi=subs(g,{x1,x2},{A(1),A(2)})';
Gi=subs(G,{x1,x2},{A(1),A(2)});
i=i+1;
x(:,i)=x(:,i-1)-inv(Gi)*gi;
A=x(:,i);
F(i)=subs(f,{x1,x2},{A(1),A(2)});
deta=abs(F(i)-F(i-1));
end
format long %保留小数点后更多位数
k=(1:n+1)';
F=[f0 F]';
x=[x0,x]';
disp '====================================================='
disp '迭代的各步结果如下:'
disp ' k x(k) F{x(k)}'
[k x F]
%=====================================
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [R,quad,err,h]=Romberg(f,a,b,n,tol)
M=1;
h=b-a;
err=1;
j=0;
R=zeros(n+1,n+1);
R(1,1)=h*(feval(f,a)+feval(f,b))/2;
while((err>tol)&(j
h=h/2;
s=0;
for p=1:M
x=a+h*(2*p-1);
s=s+feval(f,x);
end
R(j+1,1)=R(j,1)/2+h*s;
M=M*2;
for k=1:j
R(j-k+1,k+1)=R(j-k+2,k)+(R(j-k+2,k)-R(j-k+1,k))/(4^k-1);
end
err=abs((R(2,j)-R(1,j))/(4^j-1));
end
quad=R(1,j+1);
按照算法步骤编写即可