2020 4.4

题目:编写Gauss求积法计算积分的程序(Gauss点数取1,2,3,4,5即可)并用于计算积分

∫01sin⁡xxdx\int_{0}^{1} \frac{\sin x}{x} d x ∫01​xsinx​dx

部分高斯-勒让德求积公式的结点和求积系数:

nxkAknxkAk0023±0.86113631160.34785484511±0.57735026921±0.33998104360.65214515492±0.77459666920.55555555554±0.90617984590.236926885100.8888888888±0.53846931010.478628670500.568888889\begin{array}{ccc||ccc} \hline n & x_{k} & A_{k} & n & x_{k} & A_{k} \\ \hline 0 & 0 & 2 & 3 & \pm 0.8611363116 & 0.3478548451 \\ 1 & \pm 0.5773502692 & 1 & &\pm 0.3399810436 & 0.6521451549 \\ 2 & \pm 0.7745966692 & 0.5555555555 & 4 & \pm 0.9061798459 & 0.2369268851 \\ & 0 & 0.8888888888 & & \pm 0.5384693101 & 0.4786286705 \\ & & & &0& 0.568888889 \\ \hline \end{array} n012​xk​0±0.5773502692±0.77459666920​Ak​210.55555555550.8888888888​n34​xk​±0.8611363116±0.3399810436±0.9061798459±0.53846931010​Ak​0.34785484510.65214515490.23692688510.47862867050.568888889​​

区间变换与函数变换:

区间[a,b]->[-1,1]:
x=12(a+b)+12(b−a)tx=\frac{1}{2}(a+b)+\frac{1}{2}(b-a) t x=21​(a+b)+21​(b−a)t

函数变换:
∫abf(x)dx=b−a2∫−11f[12(a+b)+12(b−a)t]dt\int_{a}^{b} f(x) \mathrm{d} x=\frac{b-a}{2} \int_{-1}^{1} f\left[\frac{1}{2}(a+b)+\frac{1}{2}(b-a) t\right] \mathrm{d} t ∫ab​f(x)dx=2b−a​∫−11​f[21​(a+b)+21​(b−a)t]dt

具体实现

function [f1,I] = GaussInt(f,a,b,n)
%该函数利用Gauss-Lagendre求积公式计算积分
%依次输入函数,左右区间端点,和结点个数进行计算高斯积分
syms t
f1=subs(f,symvar(f),(b+a)/2+(b-a)*t/2)*(b-a)/2;
switch n %分别代表不同结点个数时的Gauss积分case 1I=eval(2*subs(f1,symvar(f1),0));case 2I=eval(subs(f1,symvar(f1),0.5773503))+...eval(subs(f1,symvar(f1),-0.5773503));case 3I=0.5555555555*eval(subs(f1,symvar(f1),0.7745966692))+...0.5555555555*eval(subs(f1,symvar(f1),-0.7745966692))+...0.8888888888*eval(subs(f1,symvar(f1),0));case 4I=0.3478548451*eval(subs(f1,symvar(f1),0.8611363116))+...0.3478548451*eval(subs(f1,symvar(f1),-0.8611363116))+...0.6521451549*eval(subs(f1,symvar(f1),0.3399810436))+...0.6521451549*eval(subs(f1,symvar(f1),-0.3399810436));case 5I=0.2369268851*eval(subs(f1,symvar(f1),0.9061798459))+...0.2369268851*eval(subs(f1,symvar(f1),-0.9061798459))+...0.4786286705*eval(subs(f1,symvar(f1),0.5384693101))+...0.4786286705*eval(subs(f1,symvar(f1),-0.5384693101))+...0.568888889*eval(subs(f1,symvar(f1),0));
end

踩坑日志

错误:

>> [F,I]=GaussInt(sin(x)/x, 0, 1,1)
数组索引必须为正整数或逻辑值。出错 sym/subsref (line 870)R_tilde = builtin('subsref',L_tilde,Idx);

原因:

I=2*f1(0);

应该f1是一个符号表达式而不是一个函数

错误:

>> [F,I]=GaussInt(sin(x)/x, 0, 1,1)
未定义函数或变量 'x'。出错 GaussInt (line 5)
f1=subs(f,x,(b-a)/2+(b-a)*t/2)*(b-a)/2;

原因:

syms x

所编写的函数中没有定义变量x

改进:

f1=subs(f,symvar(f),(b-a)/2+(b-a)*t/2)*(b-a)/2;

这样可以不用声明变量

学到的matlab语法

matlab代码注释

%

快速:

Ctrl +t

Ctrl+ r

switch多分支结构

switch n %分别代表不同结点个数时的Gauss积分case 1I=eval(2*subs(f1,symvar(f1),0));case 2I=eval(subs(f1,symvar(f1),0.5773503))+...eval(subs(f1,symvar(f1),-0.5773503));case 3I=0.5555555555*eval(subs(f1,symvar(f1),0.7745966692))+...0.5555555555*eval(subs(f1,symvar(f1),-0.7745966692))+...0.8888888888*eval(subs(f1,symvar(f1),0));case 4I=0.3478548451*eval(subs(f1,symvar(f1),0.8611363116))+...0.3478548451*eval(subs(f1,symvar(f1),-0.8611363116))+...0.6521451549*eval(subs(f1,symvar(f1),0.3399810436))+...0.6521451549*eval(subs(f1,symvar(f1),-0.3399810436));case 5I=0.2369268851*eval(subs(f1,symvar(f1),0.9061798459))+...0.2369268851*eval(subs(f1,symvar(f1),-0.9061798459))+...0.4786286705*eval(subs(f1,symvar(f1),0.5384693101))+...0.4786286705*eval(subs(f1,symvar(f1),-0.5384693101))+...0.568888889*eval(subs(f1,symvar(f1),0));otherwisedisp("结点数为1-5")
end

matlab函数的编写

在MATLAB中,函数定义在单独的文件。文件函数的文件名应该是相同的。

函数可以接受多个输入参数和可能返回多个输出参数。

函数语句的语法是:

function [out1,out2, ..., outN] = myfun(in1,in2,in3, ..., inN)

例:

建立函数文件,命名为 mymax.m并输入下面的代码:

function max = mymax(n1, n2, n3, n4, n5)
%This function calculates the maximum of the
% five numbers given as input
max =  n1;
if(n2 > max)max = n2;
end
if(n3 > max)max = n3;
end
if(n4 > max)max = n4;
end
if(n5 > max)max = n5;
end

每个函数的第一行要以 function 关键字开始。它给出了函数的名称和参数的顺序。

在我们的例子中,mymax 函数有5个输入参数和一个输出参数。

注释行语句的功能后提供的帮助文本。这些线条打印,当输入:

help mymax

MATLAB执行上述语句,返回以下结果:

This function calculates the maximum of thefive numbers given as input

可以调用该函数:

mymax(34, 78, 89, 23, 11)

MATLAB执行上述语句,返回以下结果:

ans =89

注:如果要输出多个返回值:

>> [F,I]=GaussInt(sin(x)/x, 0, 1,2)F =sin(t/2 + 1/2)/(2*(t/2 + 1/2))I =0.946041135536224

一种matlab的数据类型能够存储变长的一维向量:

刚开始想把结点和系数存储起来用循环进行对应的遍历

A=[1,2,3,4];
B=[5];
C=[6,7];
p={A,B,C}
以下运行结果:
>> p{1}(1,2)
ans =
2

元胞数组

数值分析——Gauss-Legendre 求积分(Matlab实现)相关推荐

  1. 牛顿斯科特MATLAB求积分,详解Matlab求积分的各种方法

    详解Matlab求积分地各种方法 一.符号积分 符号积分由函数int来实现.该函数地一般调用格式为: int(s):没有指定积分变量和积分阶数时,系统按findsym函数指示地默认变量对被积函数或符号 ...

  2. matlab中几种求积分的方法

    matlab中几种求积分的方法 举例图形 Midpoint Rule Trapezoid Rule 13 Simpsons 利用integral 结果显示 matlab中几种求积分的方法 最近看了几天 ...

  3. matlab求积分 没有解,详解Matlab求积分的各种方法

    详解Matlab求积分的各种方法 一.符号积分 符号积分由函数int来实现.该函数的一般调用格式为: int(s):没有指定积分变量和积分阶数时,系统按findsym函数指示的默认变量对被积函数或符号 ...

  4. 7 精通matlab求积分看这篇就够了

    %% 学习目标:学会求积分 %% quad函数求积分 单变量数值积分求解 clear all; syms x; f=inline('1./(sin(x)+exp(-x.^2))') %内联函数 y=q ...

  5. matlab用辛普森公式求积分_数值计算实验9 数值积分实验

    实验9 数值积分实验 成绩 实验类型:●验证性实验  ○综合性实验  ○设计性实验 实验目的:进一步熟练掌握变步长数值积分算法,提高编程能力和解决定积分问题的实践技能. 实验内容:用龙贝格积分算法计算 ...

  6. matlab 广义积分,matlab求积分(超详细,含int integral integral2/3 quad trapz

    matlab求积分 matlab求积分函数工具: int 用法1: 格式: int(fun,x,a,b) 功能: 计算定积分 用法2: 格式: int(f,x) 功能: 计算不定积分 注: 使用int ...

  7. matlab trapz求二重积分,matlab求积分(超详细,含int integral integral2/3 quad trapz

    matlab求积分 matlab求积分函数工具: int 用法1: 格式: int(fun,x,a,b) 功能: 计算定积分 用法2: 格式: int(f,x) 功能: 计算不定积分 注: 使用int ...

  8. matlab求积分(超详细,含int integral integral2/3 quad trapz)

    matlab求积分 matlab求积分函数工具: int 用法1: 格式: int(fun,x,a,b) 功能: 计算定积分 用法2: 格式: int(f,x) 功能: 计算不定积分 注: 使用int ...

  9. 龙贝格求积分算法例题_数值分析实习作业之龙贝格求积

    北京化工大学数值分析,龙贝尔求积, 实习题五:用龙贝格求积公式法计算习题五第一题积分,是结果尽可能准确(eps = 0.000001) 主程序: %习题五:用龙贝格求积公式计算下列积分 clear c ...

  10. matlab对信号积分,对信号求积分 - Simulink - MathWorks 中国

    说明 Integrator 模块输出其输入信号相对于时间的积分值. Simulink® 将 Integrator 模块作为具有一种状态的动态系统进行处理.模块动态由以下方程指定: {x˙(t)=u(t ...

最新文章

  1. IBM Cloud Speech to Text 语音识别
  2. 云笔记项目-Spring事务学习-传播MANDATORY
  3. 涨姿势了,raise...from... 是个什么操作?
  4. OMEGA3-补充注意事项
  5. 模块定义文件导出类_浓缩的就是精华——ES6模块精炼讲解
  6. Python使用广度优先和深度优先两种方法遍历目录树
  7. 插入排序、冒泡排序、选择排序、希尔排序、高速排序、归并排序、堆排序和LST基数排序——C++实现...
  8. 如何通过iPad云编译C语言,在iOS(iphone、ipad)上编辑、编译和运行c/c++(包括iPhone6和iOS8)...
  9. 关闭windows端口的批处理命令
  10. markdown格式转wiki格式(文件格式转换)
  11. 前端开发:Promise的使用丨蓄力计划
  12. java中 字符串的补位
  13. java适合音频格式_我应该为java使用什么音频格式?
  14. pandas dataframe query()
  15. 苹果笔记本服务器虚拟系统,苹果Mac虚拟机装Windows哪家强?
  16. 写跨文化交际的论文,有哪些好的题目推荐?
  17. 【Linux】NanoPi-NEO2外接spi-lcd
  18. 英语单词学习-8-39
  19. java高考填报志愿综合参考系统springboot+vue
  20. 圆周率java程序_Java小程序计算圆周率代码

热门文章

  1. RAMPS1.4 3d打印控制板接线与测试5
  2. 小说下载阅读器 官网
  3. 南航移动Redis-Cluster趟坑记
  4. kibana启动踩坑:Error: resource_already_exists_exception
  5. echart地图下钻
  6. 【flash】小游戏 连连看下载
  7. Centos7 yum安装git
  8. HTML画4个矩形,html5--5-4 绘制矩形
  9. 文亡用计算机,手机计算器阵亡 10%+10%=0.11?
  10. python每日一练github_python练习:pandas练习 来自github