matlab编程的问题
发布网友
发布时间:2022-05-17 07:40
我来回答
共2个回答
热心网友
时间:2023-08-20 06:25
不清楚你哪里不懂。就是最简单的数值积分吧,估计你是程序不会写吧。
我给你写了第一个代码,后面的两个你应该就会了,积分公式就上面那三个公式。
% 此程序有以下假定:
% 1. 用户输入正确,比如x0 x1必须输入数值
% 2. 用户输入的函数名是有效的,并且其参数可以为向量
clear;
funcName = input('Please input integrand : ', 's'); % 请用户输入被积函数名
x0 = input('Please input x0 : ');
x1 = input('Please input x1 : ');
func = str2func(funcName); % 将函数名称(字符串)转化成函数
if x0 > x1 % 保证x0是下限,x1是上限
temp = x0;
x0 = x1;
x1 = temp;
end
% 下面开始绘图,假设曲线一共取200个点
num = 200;
x = linspace(x0, x1, num);
y = func(x);
plot(x, y);
grid on;
运行结果:
热心网友
时间:2023-08-20 06:25
clear; clc; close all;
%%%%%% Task 1 %%%%%%%%
syms x;
myfun=matlabFunction(eval(input('Input function: ')));
x0=input('Input x0: ');
x1=input('Input x1: ');
clear x;
n=20;
x=x0:(x1-x0)/n:x1;
y=myfun(x);
figure; plot(x,y);
xlabel('x'); ylabel('y');
title('y(x) vs x');
%%%%%% Task 2 %%%%%%%%
n=input('Input n: ');
h=(x1-x0)/n;
intresult_R=myfun(x0);
intresult_T=myfun(x0);
intresult_S=myfun(x0);
for k=1:n-1
intresult_R=intresult_R+myfun(x0+k*h);
intresult_T=intresult_T+2*myfun(x0+k*h);
intresult_S=intresult_S+(2+2*mod(k,2))*myfun(x0+k*h);
end
intresult_R=intresult_R+myfun(x1);
intresult_T=intresult_T+myfun(x1);
intresult_S=intresult_S+myfun(x1);
intresult_R=intresult_R*h;
intresult_T=intresult_T*h/2;
intresult_S=intresult_S*h/3;
fprintf('When n=%d,\n',n);
fprintf('the result using Rectangle rule is %0.6f;\n',intresult_R);
fprintf('the result using Trapezium rule is %0.6f;\n',intresult_T);
fprintf('the result using Simpson''s rule is %0.6f;\n',intresult_S);
%%%%%% Task 3 %%%%%%%%
n=100000;
h=(x1-x0)/n;
intresult=myfun(x0);
for k=1:n-1
intresult=intresult+(2+2*mod(k,2))*myfun(x0+k*h);
end
intresult=intresult+myfun(x1);
intresult=intresult*h/3;
int_C=eval(vpa(intresult,6));
int_R=eval(vpa(intresult_R,6));
int_T=eval(vpa(intresult_T,6));
int_S=eval(vpa(intresult_S,6));
R_error=(abs(int_R-int_C))/int_C;
T_error=(abs(int_T-int_C))/int_C;
S_error=(abs(int_S-int_C))/int_C;
fprintf('The percentage error of Rectangle method is %f;\n',R_error);
fprintf('The percentage error of Trapezium method is %f;\n',T_error);
fprintf('The percentage error of Simpson''s method is %f;\n',S_error);
运行结果:
Input function: sin(x.^2)+1
Input x0: 0
Input x1: 2
Input n: 20
When n=20,
the result using Rectangle rule is 2.864749;
the result using Trapezium rule is 2.802589;
the result using Simpson's rule is 2.804811;
The percentage error of Rectangle method is 0.021381;
The percentage error of Trapezium method is 0.000781;
The percentage error of Simpson's method is 0.000011;
注:
第一题y(x)得设复杂点,要不3种积分结果都正确,第3题没法玩了。
第二题那个要求画图说明方法的我不太明白题意,用手画行不行啊
第三题用于做比较的正确结果我是用n=100000来算的,应该够大了,然后那个错误率我就按它说的6位有效数字的结果来做的。