基于Matlab实现多次最佳一致的函数逼近(类似求渐进函数)

%%%做系统识别很重要,方法上完全符合系统识别最基础的理论

function [sun]=main(n)
fplot('1/(x+2)',[-,],'r');
x=ones(n+,);
for j=:n+
x(j+)=cos(pi*(n+-j)/(n+));
end
first=ones(n+,);
f=./(x+); %原函数
last=first;
for j=:n+
last(j)=(-)*last(j-);
end
A=ones(n+,n+);
A(:,)=first;
A(:,n+)=last;
for j=:n+
for t=:j
A(:,j)=x.*A(:,j);
end
end
e=(1e-)*first; %精度控制条件
sun=A\f;
while ()
at='';
for i=:n
for t=:i
if (t==)
at=strcat('(',num2str(sun(t+)),')');
elseif (t>)
xt='t';j=;
while j<t
xt=strcat('t*',xt);j=j+;
end
at=strcat(num2str(t),'*(',num2str(sun(t+)),')*',xt,'+',at);
end
end
end
%以下得到逼近函数
ap1=sun(:n+,[]);
for i=:n+
ap(i)=ap1(n+-i);
end
yt=strcat('-1/(t+2)^2=',at);
[y]=solve(yt,'t');
y=numeric(y);
%以下得到一组新的交错点组
for i=:n+
if y(i) < & y(i)>-
for j=:n+
if y(i)<x(j)&y(i)>x(j-)
if (/(x(j-)+)-polyval(ap,x(j-)))*(/(y(i)+)-polyval(ap,y(i)))>
x(j-)=y(i);
elseif (/(x(j-)+)-polyval(ap,x(j-)))*(/(y(i)+)-polyval(ap,y(i)))<
x(j)=y(i);
end
end
end
end
end
A=ones(n+,n+);
A(:,)=first;
A(:,n+)=last;
for j=:n+
for t=:j
A(:,j)=x.*A(:,j);
end
end
f=./(x+);
sun1=A\f;
if(abs(sun1-sun)<e)
break;
end
sun=sun1;
end
hold on;
funcion=poly2sym(ap);
ezplot(funcion,[-,]);
num=num2str(n);
legend('原函数曲线',strcat(num,'次逼近函数曲线'));
title('最佳逼近比较示意图');
xlabel('x的取值');
ylabel('f(x)的取值');
grid on;
end
上一篇:Java面向对象_增强for可变参数与代码块


下一篇:通过TopShelf快速开发服务程序