写在最前面
由于自身水平有限,难免有一些地方写的不好!
但因为有些同学没有学过matlab
。并且同学们每天学习和科研任务繁重,难以抽时间重新学一遍语法。所以这里给那些同学提供一个 参考。
experiment3_1
% 数值实验题3.1
% 求y=cos(x)在[-1, 1]上的三次最佳平方逼近多项式
clc, clear;
syms x;
wfun = 1;
func = cos(x);
phifun = [1, x, x.^2, x.^3];
% 勒让德多项式
% phifun = [1, x, 3*x.^2-1, 2.5*x.^3 - 1.5*x];
n = length(phifun);
A = zeros(n);
B = zeros(n, 1);
a = -1; b = 1;
for i=1:n
for j=1:n
f1 = wfun .* phifun(i) .* phifun(j);
f1 = inline(f1);
if i == 1 && j ==1
A(i, j) = b-a;
else
A(i, j) = quad(f1, a, b);
end
end
f2 = wfun * phifun(i) * func;
f2 = inline(f2);
B(i) = quad(f2, a, b);
end
alpha = A \ B;
f = phifun * alpha;
fprintf('三次最佳平方逼近多项式为:')
f = vpa(f,4) %设置精度,为有效数字位数
fplot(func, 'r-')
hold on
fplot(f, 'b:')
xlim([a, b])
experiment3_2
% 数值实验题3.
% 最小二乘法求S=ae^{-bt}中的系数
clc,clear;
syms x;
t = [0.25, 0.5, 1, 1.5, 2, 3, 4, 6, 8];
C = [19.21, 18.15, 15.36, 14.1, 12.89, 9.32, 7.45, 5.24, 3.01];
ln_C = log(C);
% 散点图
scatter(t, C);
% 最小二乘法
coefficient1 = polyfit(t, ln_C, 1) %用一次函数拟合曲线
b = coefficient1(1);
a = exp(coefficient1(2));
fun = a * exp(b*x);
fprintf('最小二乘法拟合表达式为:')
fun = vpa(fun,4)
hold on
fplot(fun, 'b-')
xlim([0.25, 10])
legend('真实值','最小二乘拟合')
experiment3_2
% 数值实验题3.3
% 求直线运动方程
clc,clear;
syms x;
t = [0, 0.9, 1.9, 3.0, 3.9, 5];
s = [0, 10, 30, 50, 80, 110];
scatter(t, s);
% 最小二乘法
coefficient1 = polyfit(t, s, 2); %用二次函数拟合曲线
phifun = [x^2, x, 1];
s_hat = polyval(coefficient1, t);
hold on
% plot(t, s_hat)
xlim([0, 5])
fun = phifun * coefficient1.';
fprintf('物体运动的表达式为:')
fun = vpa(fun,4)
fplot(fun, 'b-')
参考:https://blog.csdn.net/weixin_44123908/article/details/106340570
祝大家学习和科研顺利!
🍺🍺🍺🍺🍺🍺🍺🍺🍺🍺🍺🍺🍺🍺🍺🍺🍺🍺🍺🍺🍺🍺