写一段matlab代码,设置f(x)=(x^2)*ln(x+2);求出权函数p(x)=1的最佳平方逼近三次多项式,并作图与原函数比较。
时间: 2023-09-20 15:05:54 浏览: 181
matlab最佳平方逼近
5星 · 资源好评率100%
在上一题中,我们已经使用 MATLAB 代码求解了权函数为 $p(x)=1$ 的最佳平方逼近三次多项式的系数向量。现在,我们可以使用这个系数向量来计算平方逼近多项式 $q(x)$ 的值,并将其与原函数 $f(x)$ 进行比较。下面是完整的 MATLAB 代码示例:
```matlab
% 定义函数 f(x) = (x^2)*ln(x+2)
function y = f(x)
y = (x.^2).*log(x+2);
end
% 定义常数权函数 p(x) = 1
function y = p(x)
y = ones(size(x));
end
% 定义误差平方积分的被积函数
function y = integrand(x)
y = (f(x) - p(x)).^2;
end
% 计算误差平方积分
err = integral(@integrand, -1, 1);
% 定义三次多项式的系数向量
syms a0 a1 a2 a3
coeffs = [a0, a1, a2, a3];
% 定义三次多项式函数 q(x)
function y = q(x, coeffs)
y = coeffs(1) + coeffs(2)*x + coeffs(3)*x.^2 + coeffs(4)*x.^3;
end
% 定义误差平方积分的被积函数
function y = error(x, coeffs)
y = (f(x) - q(x, coeffs)).^2;
end
% 定义误差平方积分的函数句柄
err_fun = @(c) integral(@(x) error(x, c), -1, 1);
% 使用 fminsearch 函数求解误差平方积分最小的系数向量
coeffs_min = fminsearch(err_fun, [0, 0, 0, 0]);
% 计算平方逼近多项式 q(x) 的值
x = linspace(-1, 1, 1000);
y_q = q(x, coeffs_min);
% 计算原函数 f(x) 的值
y_f = f(x);
% 绘制图形
plot(x, y_f, 'LineWidth', 2); hold on;
plot(x, y_q, 'r--', 'LineWidth', 2); hold off;
xlabel('x');
ylabel('y');
legend('原函数 f(x)', '平方逼近多项式 q(x)');
```
在此示例中,我们首先定义了函数 `f(x)` 和常数权函数 `p(x)`,并计算出误差平方积分的值 `err`。然后我们定义了三次多项式函数 `q(x)` 和误差平方积分的被积函数 `error(x, coeffs)`,其中 `coeffs` 是三次多项式的系数向量。接着,我们使用 `fminsearch` 函数求解误差平方积分最小的系数向量 `coeffs_min`。接下来,我们使用 `linspace` 函数生成一组 1000 个等间距的点,用于绘制图形。然后,我们分别计算平方逼近多项式 `q(x)` 和原函数 `f(x)` 的值,并使用 `plot` 函数将它们绘制在同一个图形中进行比较。最后,我们使用 `xlabel`、`ylabel` 和 `legend` 函数添加图例和标签,使图形更加清晰易懂。
阅读全文