数学实验课MATLAB实验报告一(题目+代码)

这篇具有很好参考价值的文章主要介绍了数学实验课MATLAB实验报告一(题目+代码)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

今天是2022年10月14日星期五,农历九月十九,多云,有点冷。闲得无聊就把前些天做的数学实验课作业敲上来了。一共有6个题。代码里的注释写得非常详细!!!

程序设计部分题目

1.(1)

题目

f ( x ) = x 2 2 f(x)=\dfrac{x^2}{2} f(x)=2x2,定义二元函数 g ( x 1 , x 2 ) = { m a x f ( x ) , x ∈ ( x 1 , x 2 ) m i n f ( x ) , x ∈ ( x 2 , x 1 ) g(x_1,x_2)=\begin{cases} max f(x),x\in(x_1,x_2) \\min f(x),x\in(x_2,x_1) \end{cases} g(x1,x2)={maxf(x),x(x1,x2)minf(x),x(x2,x1) g ( 4 , 3 ) , g ( − 1 , 3 ) g(4,3),g(-1,3) g(4,3)g(1,3).

代码

首先我们编写一个函数脚本文件存储 f ( x ) f(x) f(x)

function ff=f(x)
    ff=1/2*x.^2;
end

利用function定义函数。将它保存为文件f.m
下面我们编写函数 g ( x 1 , x 2 ) g(x_1,x_2) g(x1,x2).有很多种方法可以求函数的极值,这里我用随机搜索法来求函数的极值。

function a=g(X);
tic%开始计时,记录程序运行时间
N=10000;%阈值
s=0;%最值重复次数
i=1;%循环变量
if (X(1)<=X(2))
    while s<N%最大值重复次数小于阈值
        x0=unifrnd(X(1),X(2));%搜索区间
        y(i)=f(x0);%计算函数值
        maxy(i)=max(y);%将当前最大值记下
        if i==1
            x=x0;%万一第一次就是最大值,记下来
        else
            if maxy(i)>maxy(i-1)%当前值比之前的最大值大
                x=x0;%更换最大值点
                s=0;%最大值重复次数置0
            else s=s+1;%之前的最大值仍是最大值,则最值重复次数+1
            end
        end
        i=i+1;%循环变量+1
    end
    b=num2str(max(maxy));
end

if (X(1)>X(2))
    while s<N%最小值重复次数小于阈值
        x0=unifrnd(X(2),X(1));%搜索区间
        y(i)=f(x0);%计算函数值
        miny(i)=min(y);%将当前最小值记下
        if i==1
            x=x0;%万一第一次就是最小值,记下来
        else
            if miny(i)<miny(i-1)%当前值比之前的最小值小
                x=x0;%更换最小值点
                s=0;%最小值重复次数置0
            else s=s+1;%之前的最小值仍是最小值,则最值重复次数+1
            end
        end
        i=i+1;%循环变量+1
    end
    b=num2str(min(miny));
end

c=sprintf('f(%d,%d)=',X);
disp(c)
fprintf('%c',8);%删掉换行符
disp(b)
disp('该值为数值解,有一定误差')
toc%计时结束
end

g ( x 1 , x 2 ) g(x_1,x_2) g(x1,x2)的代码保存为g.m,与f.m放在同一文件夹下。在命令行窗口输入

g([4,3])
g([-1,3])

即可得到结果。不过,本题中的随机搜索方法有一定的缺陷。因为当 x 1 < x 2 x_1<x_2 x1<x2时,随机生成的 x x x取值范围是 ( x 1 , x 2 ) (x_1,x_2) (x1,x2),而不是 [ x 1 , x 2 ] [x_1,x_2] [x1,x2],若要解决这一问题,在代码中稍作改动,添加几句即可。但因为我懒为了容易理解,上面给出的代码是最基础的随机搜索思想的代码,本代码不作改进。

1.(2)

题目

编写matlab程序实现:从一个数组中去掉一个最大值,再去掉一个最小值,剩下的值求平均。并随机生成一个数组,验证程序.

代码

这个题非常简单咯,把数组中最大和最小的数的位置找出来,然后赋值为0。把数组的行数和列数求出来,数组求和除以(行数×列数-2)即可。

A=input('请输入一个数组:')
A(A==max(A,[],'all'))=0;
A(A==min(A,[],'all'))=0;
a=size(A);
average=sum(A,'all')/(a(1)*a(2)-2)

是这样吗?不是,上面的想法有一点错误。A(A==max(A,[],‘all’))=0;确实把最大值变成了0,但如果数组中有多个相等的数都是最大值,那么该行命令就会把所有这些数都变成0,而求平均时的除数一直都是(数组中元素的个数-2),那么就会得到错误的结果。为了修改这一错误,我们把命令改为只找出第一个最值所在的位置并赋为0即可。修改后的代码如下:

A=input('请输入一个数组:')
maxA=find(A==max(A,[],'all'),1);%找出第一个最大值出现的位置
minA=find(A==min(A,[],'all'),1);%第一个最小值的位置
A(maxA)=0;
A(minA)=0;
a=size(A);
average=sum(A,'all')/(a(1)*a(2)-2)

将代码随便保存成什么名字.m,点击运行,会出现“请输入一个数组:”的提示。此时在命令行窗口输入

rand(5)%随便几都可以,这里生成的是5×5的矩阵,矩阵元素是0~1内的随机数

即可验证程序。

1.(3)

题目

通过键盘任意输入一个数组(元素个数大于20),编写程序使得生成一个新的数组,要求每相邻的两个元素中间插入一个元素,这个元素是两个相邻元素的平均值。如:通过键盘输入数组[1 2 5],则编写程序输出[1 1.5 2 3.5 5].

代码

A=input('请输入一个向量:');
s=size(A);%输入的向量的行数和列数
a=zeros(1,2*s(1)*s(2)-1);%生成一个1×(2×行数×列数-1)的零向量
for i=1:s(1)*s(2)
    a(2*i-1)=A(i);
end%将原向量A内的数字保存到新向量a的对应位置
for i=1:(s(1)*s(2)-1)
    a(2*i)=(a(2*i-1)+a(2*i+1))/2;
end%计算A中两个相邻数的平均数,存到a内应该存到的位置
if s(1)~=1%如果输入的向量A是列向量
    a=a';%把输出结果变成列向量
end
c=sprintf('%.2f ',a);
disp('输出结果:')
disp(c)

这个代码也是随便保存成什么名字都可以.m,然后运行,输入一个向量,回车。

2.

题目

x x x 3 3 3 5 5 5 1 1 1 7 7 7 4 4 4 9 9 9 0 0 0 2 2 2 12 12 12 8 8 8 15 15 15 11 11 11 19 19 19 13 13 13
y y y 3 3 3 1 1 1 1.46 1.46 1.46 1.92 1.92 1.92 2.38 2.38 2.38 2.84 2.84 2.84 3.3 3.3 3.3 3.7 3.7 3.7 4.2 4.2 4.2 4.69 4.69 4.69 5.1538 5.1538 5.1538 5.61 5.61 5.61 6.0769 6.0769 6.0769 6.5385 6.5385 6.5385

(1)要求 x x x按升序排列后,输出对应的 y y y值;
(2)如果 y = s i n x y=sinx y=sinx, 要求 x x x按升序排列后,输出对应的 y y y值.

代码

x=[3 5 1 7 4 9 0 2 12 8 15 11 19 13;
    3 1 1.46 1.92 2.38 2.84 3.3 3.7 4.2 4.69 5.1538 5.61 6.0769 6.5385];
%x矩阵的第二行存着y值
x_s=sort(x(1,:));%排好序的x的第一行存入x_s
for i=1:14
    [r,c]=find(x(1,:)==x_s(i));%找出x_s(i)在x中原本的位置,并记录行和列
    y(i)=x(2,c);%y值就是x的第二行里,上面找出的列上的数
end
disp('(1)')%输出字符(1)
y
disp('(2)')
y=sin(x_s)

随便保存成什么名字.m,运行。。。

作图部分题目

3.

题目

绘制函数 y = x e − x + s i n x y=xe^{-x}+sinx y=xex+sinx [ − 2 π , 2 π ] 上 [-2π,2π]上 [2π,2π]的曲线,在图形上标出图名和最大、最小值点.

代码

x=-2*pi:0.1:2*pi;%x是一列向量,从-2π到2π,每隔0.1取一个值存储到x内
y=x.*exp(-1.*x)+sin(x);%计算函数值
plot(x,y)%画连线图
xlim([-2*pi,2*pi])%限定图中显示的横轴范围
title('$xe^{-x}+sinx$','Interpreter','latex')%图头
[~,lmax]=max(y)
[~,lmin]=min(y)
hold on%在上面的图中继续作图
scatter(x(lmax),y(lmax),'ro')%画散点图,标记最大值点
hold on
scatter(x(lmin),y(lmin),'ro')%标记最小值点

随便保存成什么名字.m,运行。运行结果如下图:
matlab数学实验,matlab,算法,开发语言

4.

题目

subplot命令在4个子窗口里,分别画出四叶玫瑰线 r = 2 s i n 2 θ r=2sin2\theta r=2sin2θ,抛物线 y 2 = 5 x y^2=5x y2=5x,对数螺线 r = e 2 θ r=e^{2\theta} r=e2θ,笛卡尔叶形线 x 3 + y 3 − 3 y = 0 x^3+y^3-3y=0 x3+y33y=0.

代码

这个题也是不难,就是subplot比较麻烦呗,然后里面还用到了极坐标作图命令polar(x,y)。另外,笛卡尔叶形线要用参数方程来表示。四个分图中,每一个分图运用的都是第三题中的方法。给分图添加标题时使用latex来输入公式,这样显示出来比较好看。

for k = 1:4
    ax(k) = subplot(2,2,k);
end

subplot(ax(1))
x=-20*pi:0.1:20*pi;
y=x.*sin(2.*x);
polar(x,y)
title('$$r=2sin2\theta$$','Interpreter','latex')%标题

subplot(ax(2))
y=-10:0.1:10;
x=1/5*y.^2;
plot(x,y)
title('$$y^2=5x$$','Interpreter','latex')

subplot(ax(3))
x=-2*pi:0.01:2*pi;
y=exp(2*x);
polar(x,y)
title('$$r=e^{2\theta}$$','Interpreter','latex')

subplot(ax(4))
a = 1.5;
t = -5:0.1:5;
x = 3*a.*t./(1+t.^3);
y = 3*a.*t.^2./(1+t.^3);
plot(x,y)
title('$$x^3+y^3-3y=0$$','Interpreter','latex')

运行结果如图:
matlab数学实验,matlab,算法,开发语言
最后一个笛卡尔叶形线,虽然是隐函数,但不推荐使用ezplot函数。一是因为MATLAB官方从R2016a起就不建议使用ezplot而推荐使用fplotfimplicit:
matlab数学实验,matlab,算法,开发语言
matlab数学实验,matlab,算法,开发语言
二是,用ezplot画出来的图它根本就不对啊:
matlab数学实验,matlab,算法,开发语言
上面这个图的运行命令如下,不信可以自己去试一下:

ezplot('x^3+y^3-3*y=0')

5.

题目

画出 z = s i n ( x 2 + y 2 ) x 2 + y 2 z=\frac{sin(\sqrt{x^2+y^2})}{\sqrt{x^2+y^2}} z=x2+y2 sin(x2+y2 )所表示的三维曲面, x , y x,y x,y的取值范围是 [ − 8 , 8 ] [-8,8] [8,8].

代码

这个题目可以运用mesh或者surf命令,下面的代码用的是mesh来画一个三维网格图。

clc,clear
x=-8:0.1:8;
y=x;
for i=1:length(x)
    for j=1:length(y)
        s(i,j)=sqrt(x(i).^2+y(j).^2);
    end
end
z=sin(s)./s;
mesh(x,y,z)

运行结果如图:
matlab数学实验,matlab,算法,开发语言
若想使用surf,只需把上面代码中的mesh改为surf。下面是运行结果:
matlab数学实验,matlab,算法,开发语言

符号运算部分题目

6.

题目

已知 f ( x ) = s i n ( 2 π x ) l n ( 4 x ) f(x)=sin(2πx)ln(4x) f(x)=sin(2πx)ln(4x),求 − d 2 f ( x ) d x 2 -\dfrac{d^2f(x)}{dx^2} dx2d2f(x) ∫ 0 1 f ( x ) d x \displaystyle \int^{1}_{0}{f(x)dx} 01f(x)dx.

代码

syms x y%创建符号对象x和y
y=sin(2*pi*x)*log(4*x);
pretty(-1*diff(y,2))%求二阶导×(-1)并美化输出
pretty(int(y,1,2))%求1到2上的定积分,美化输出

这里使用MATLAB自带的pretty函数来使输出结果更好看。也可以使用symdisp函数来使输出结果更更美观。该函数是网友自己编写的函数,站内也有资源,请自行搜索下载。

总结

这些个题目都是非常基础的MATLAB程序设计,但是对于小(本)白(人)来说,还是要费一些时间的。而且我又有些强迫症,必须要把输出结果做的很漂亮才会满意,所以一点点地修改了很久……短时间内除了考试应该不会用到MATLAB了吧,敲上来复习一遍就当是做个阶段性总结了。文章来源地址https://www.toymoban.com/news/detail-731575.html

到了这里,关于数学实验课MATLAB实验报告一(题目+代码)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 2022 年数学建模竞赛题目A 题波浪能最大输出功率设计(解析及Matlab代码)

    目录 问题一: 问题二: 问题三: 问题四: 随着经济和社会的发展,人类面临能源需求和环境污染的双重挑战,发展可再生能源产业 已成为世界各国的共识。波浪能作为一种重要的海洋可再生能源,分布广泛,储量丰富,具有 可观的应用前景。波浪能装置的能量转换效率是波浪

    2024年02月13日
    浏览(49)
  • Matlab数学建模实验题

    (1)用起泡法对10个数由小到大排序.即将相邻两个数比较,将小的调到前头。 (2)有一个4×5矩阵,编程求出其最大值及其所处的位置. (3)编程求 (4)一球从100米高度自由落下,每次落地后反跳回原高度的一半,再落下.求它在第10次落地时,共经过多少米?第10次反弹有多高? (

    2024年02月11日
    浏览(54)
  • 2023南京邮电大学通达学院《数学实验》MATLAB实验答案

    四月维夏,六月徂暑。 勤将励勉,勿望再晨。 ——赠nmy 南京邮电大学通达学院《数学实验》MATLAB实验答案 答案更新时间:2023.04.28,修改了4.2的存疑部分。已更新完成,如无错误不在更新 为了方便核算,我在代码中单独将 m 定义为自变量运算或者直接以m=117代入,作业中可以

    2023年04月20日
    浏览(117)
  • 过控Matlab-实验法建立被控过程的数学模型(一)

    太原理工大学过程控制实验之实验法建立被控过程的数学模型 已知某液位对象,在阶跃扰动量△u(t)=20%时,其响应的试验数据如表1.1: 若将该液位对象近似为一阶惯性环节加纯迟延,试利用作图法确定其增益 K、时间常数 T和纯迟延时间τ。 液位对象在阶跃扰动量△u(t)=20%时响

    2024年02月07日
    浏览(31)
  • 数学建模常用方法及MATLAB代码

    我们通常使用二分法计算非线性方程或者超越方程近似根,MATLAB代码为: π定理的解题步骤 : (1)确定关系式:根据对所研究的现象的认识,确定影响这个现象的各个物理量及其关系式: (2)确定基本量:从n个物理量中选取所包含的m个基本物理量作为基本量纲的代表,一般取m=

    2024年02月03日
    浏览(44)
  • 【数学建模】灰色关联(Matlab代码实现)

    目录 1 灰色关联理论 2 算例及Matlab代码实现 2.1 算例1 2.2 算例2   2.3 算例3 2.4 算例4  3 写在最后 灰色关联分析l是由邓聚龙教授于1982年提出的,也称“邓氏灰色关联法”。 方法以部分信息已知 ,部分信息未知的“贫信息”为研究对象,通过对部分已知信息的生成和开发,实现对

    2024年02月09日
    浏览(51)
  • MATLAB--数学建模作图大全及代码说明

    目录 1、二维曲线 2、二维渐变图 3、二维散点图  4、条形图 5、填充图 6、多Y轴图 7、三维曲线图 8、三维散点图 9、三维伪彩图 10、裁剪伪彩图 11、等高线图 12、三维等高线图 13、等高线填充图 14、三维矢量场图 15、伪彩图+投影图 16、热图 17、分子模型图 18、分形图 二维曲

    2024年02月11日
    浏览(53)
  • 数学建模之TOPSIS模型(含matlab代码)

      目录 一、方法和原理 1、理想解法  2、方法原理  二、TOPSIS法的具体算法 (1) 用向量规划化的方法求得规范决策矩阵 1、线性变换 2、0-1变换 3、区间型属性的变换 4、向量规范化 5、标准换处理  (2)构成加权规范阵C  (3)确定正理想解和负理想解  (4)计算各方案到正

    2024年02月07日
    浏览(38)
  • 数学建模之灰色预测模型代码(matlab版)

    灰色关联分析步骤 【1】确定比较对象(评价对象)(就是数据,并且需要进行规范化处理,就是标准化处理,见下面例题的表格数据)和参考数列(评价标准,一般该列数列都是1,就是最优的的情况) 【2】确定各个指标权重,可用层次分析确定 【3】计算灰色关联系数 【4】

    2024年02月09日
    浏览(46)
  • 数学建模算法汇总(全网最全,含matlab案例代码)

      全国大学生数学建模竞赛中,常见的算法模型有以下30种: 最小二乘法 数值分析方法 图论算法 线性规划 整数规划 动态规划 贪心算法 分支定界法 蒙特卡洛方法 随机游走算法 遗传算法 粒子群算法 神经网络算法 人工智能算法 模糊数学 时间序列分析 马尔可夫链 决策树 支

    2024年02月08日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包