function [coff,err]= lmz(func,m,a,b,eps)
if(nargin == 4)
eps=1.0e-6;
end
syms v;
maxv = 0.0;
max_x = a; %记录abs(f(x)-p(x))取最大值的x
for k=0:m
px(k+1)=power(v,k);
end %p(x)多项式
for i=1:m+2
x(i)=0.5*(a+b+(b-a)*cos(3.14159265*(m+2-i)/(m+1)));
fx(i)=subs(sym(func), findsym(sym(func)),x(i));
end %初始的x和f(x)
A = zeros(m+2,m+2);
for i=1:m+2
for j=1:m+1
A(i,j)=power(x(i),j-1);
end
A(i,m+2)=(-1)^i;
end
c =A\transpose(fx); %p(x)的初始系数
u = c(m+2); %算法中的u
tol = 1; %精度
while(tol>eps)
t = a;
while(t<b) %此循环找出abs(f(x)-p(x))取最大值的x
t = t + 0.05*(b-a)/m;
px1 = subs(px,'v',t);
pt = px1*c(1:m+1);
ft = subs(sym(func), findsym(sym(func)),t);
if abs(ft-pt)>maxv
maxv = abs(ft-pt);
max_x = t;
end
end
if max_x>b
max_x = b;
end
%以下可参考算法的三个确定新点集的情况
if (a<=max_x)&&(max_x<=x(2)) %第一种情况
f0 = subs(sym(func), findsym(sym(func)),x(2));
px1 = subs(px,'v',x(2));
pt = px1*c(1:m+1);
d1 = f0 - pt;
fm = subs(sym(func), findsym(sym(func)),max_x);
pm1 = subs(px,'v',max_x);
pm = pm1*c(1:m+1);
d2 = fm - pm;
if d1*d2>0
x(2) = max_x;
end
else
if (x(m+1)<=max_x)&&(max_x<=b) %第二种情况
f0 = subs(sym(func), findsym(sym(func)),x(m+1));
px1 = subs(px,'v',x(m+1));
pt = px1*c(1:m+1);
d1 = f0 - pt;
fm = subs(sym(func), findsym(sym(func)),max_x);
pm1 = subs(px,'v',max_x);
pm = pm1*c(1:m+1);
d2 = fm - pm;
if d1*d2>0
x(m+1) = max_x;
end
else %第三种情况
for i=2:m
if(x(i)<=max_x)&& (x(i+1)>=max_x)
index_x = i;
break;
end
end %找到max_x所在区间
f0 = subs(sym(func), findsym(sym(func)),x(index_x));
px1 = subs(px,'v',x(index_x));
pt = px1*c(1:m+1);
d1 = f0 - pt;
fm = subs(sym(func), findsym(sym(func)),max_x);
pm1 = subs(px,'v',max_x);
pm = pm1*c(1:m+1);
d2 = fm - pm;
if d1*d2>0
x(index_x) = max_x;
end
end
end
for i=1:m+2 %重新计算f(x)
fx(i)=subs(sym(func), findsym(sym(func)),x(i));
end
for i=1:m+2
for j=1:m+1
A(i,j)=power(x(i),j-1);
end
A(i,m+2)=(-1)^i;
end
c =A\transpose(fx); %重新计算p(x)的系数
tol = abs(c(m+2)-u);
u = c(m+2);
end
coff = c(1:m+1);
err = u;
没有合适的资源?快使用搜索试试~ 我知道了~
MATLAB常用算法程序集
共258个文件
m:256个
xls:1个
doc:1个
需积分: 12 14 下载量 94 浏览量
2018-02-03
22:55:14
上传
评论 1
收藏 124KB RAR 举报
温馨提示
MATLAB常用算法程序集,内含多个美赛数学建模常用算法,基本可以直接使用
资源推荐
资源详情
资源评论
收起资源包目录
MATLAB常用算法程序集 (258个子文件)
光盘使用说明.doc 21KB
lmz.m 3KB
bessel.m 3KB
bessel2.m 2KB
peEllip5.m 2KB
Gauss.m 2KB
peEllip5m.m 2KB
SmartYTBJ.m 2KB
IntGauss.m 2KB
SmartBJ.m 2KB
QBS.m 2KB
DTL.m 2KB
CollectAnaly.m 2KB
besselm.m 2KB
ThrSample3.m 2KB
DblSimpson.m 1KB
IntGaussLobato.m 1KB
besselm2.m 1KB
ThrSample2.m 1KB
IntGaussLager.m 1KB
CISimpson.m 1KB
IntGauss.m 1KB
IntSimpson.m 1KB
ThrSample1.m 1KB
ZJZXEC.m 1KB
IntGaussLada.m 1KB
GaussXQAllMain.m 1KB
IntSimpson.m 1KB
mulDamp.m 1KB
DistgshAnalysis.m 1KB
mulGXF2.m 1KB
NewtonCotes.m 1KB
DEYCJZ_ml.m 1KB
DEYCJZ_mid.m 1KB
betap.m 1KB
TwoStep.m 1KB
mulNewtonSOR.m 1KB
mulConj.m 1KB
IntGaussLager.m 1KB
FivePoint.m 1KB
DH.m 1KB
BJ.m 1KB
IntGaussHermite.m 1KB
mulMix.m 1KB
DEYCJZ_hm.m 1KB
ForwardReg.m 1KB
Parabola.m 1KB
IntSample.m 992B
DEWT_glg.m 991B
BSample.m 988B
hj.m 979B
NewtonDown.m 956B
SecSample.m 934B
peParabWegImp.m 918B
QBS2.m 917B
mulNumYT.m 895B
BackReg.m 890B
ModifSecant.m 886B
BSOR.m 884B
mulGXF1.m 863B
SOR.m 849B
BGS.m 846B
MultiRoot.m 845B
SubHermite.m 844B
gamap.m 825B
peHypb2FL.m 820B
FivePoint2.m 817B
peParabKN.m 812B
NewtonRoot.m 810B
NewtonRoot.m 810B
Diff2BSample.m 806B
DiffBSample.m 804B
Language.m 804B
IntDBGauss.m 797B
CompPoly2Reg.m 786B
mulNewtonStev.m 781B
Pade.m 780B
MainAnalysis.m 774B
GaussXQLineMain.m 768B
gamafun.m 768B
mulDiscNewton.m 767B
DblSecant.m 767B
SimpleNewton.m 766B
followup.m 765B
mulDNewton.m 759B
GaussJordanXQ.m 758B
Secant.m 748B
HalfInterval.m 744B
Newtonforward.m 734B
DblTraprl.m 733B
mulVNewton.m 732B
DL.m 731B
Newtonback.m 725B
DISimpson.m 716B
PolyReg.m 716B
SinleSecant.m 711B
FourPoint.m 706B
DEYCJZ_myds.m 702B
Union2.m 699B
ThreePoint.m 689B
共 258 条
- 1
- 2
- 3
资源评论
qq_41707197
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功