matlab脚本进行连续函数的最佳逼近
这是一个 MATLAB 脚本,用于进行连续函数的最佳逼近。脚本实现了对一般形式的连续函数的逼近,用户可以指定原函数、定义域以及逼近的最大次数。以下是对代码的主要部分的解释:function fe = fitfun()
% 连续函数的最佳逼近
% 取基{1, x, ...}
% 默认算例为课本:P60,例3.1
% 原函数f(x)=x^(1/2),定义域
% 结果:P(x) = 10/27 + 88/135x 平方误差=0.00010803
% 输入原函数
fs = input('<连续函数的最佳逼近>\n输入原函数f(x):[直接回车表示:f(x)=x^(1/2)]\nf(x)=', 's');
if isempty(fs)
fs = 'x^(1/2)';
end
f = sym(fs);
% 输入定义域上下界
a = input('定义域() 上界a:');
b = input('Domain () 下界b:');
% 输入逼近的最大次数
n = input('{1, x, x^2, ..., x^n}\nInput the maximum index n: ');
% 创建向量
v = vv(n);
h = vh(n);
% 计算矩阵 G 和向量 B
G = int(v * h, a, b);
B = int(f * v, a, b);
% 计算系数矩阵 C
C = inv(G) * B;
% 计算逼近多项式
fe = h * C;
% 误差
SError = vpa(int(f * f, a, b) - int(f * h, a, b) * C, 6);
% 绘制原函数和逼近函数
x = a:(b-a)/100:b;
y = subs(f, x);
plot(x, y, 'r');
hold on;
y = subs(fe, x);
plot(x, y);
% 输出误差
disp(['误差: ', char(SError)]);
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function v = vv(n)
% 创建垂直向量,如
% 1
% x
% x^2
% ...
% x^n
if (n < 0 || n > 9)
error('请确保 ''n'' 在 范围内');
end
s = '';
for i = 0:n
s = strcat(s, ';x^');
s = strcat(s, num2str(i));
end
s(1) = '[';
sz = size(s);
s(sz(2) + 1) = ']';
v = simplify(sym(s));
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function v = vh(n)
% 创建水平向量,如
%
if (n < 0 || n > 9)
error('请确保 ''n'' 在 范围内');
end
s = '';
for i = 0:n
s = strcat(s, ',x^');
s = strcat(s, num2str(i));
end
s(1) = '[';
sz = size(s);
s(sz(2) + 1) = ']';
v = simplify(sym(s));
end
这个脚本首先要求用户输入原函数、定义域以及逼近的最大次数。然后,它构建了基函数向量和水平向量,计算了系数矩阵 C,并绘制了原函数和逼近函数的图表。最后,输出了逼近误差。
页:
[1]