• MATLAB数值计算编程题


    2020年疫情期间接了一个活,培训MATLAB编程。之前几乎没有接触过MATLAB,从学习到授课也只有10天的准备时间。之前买了一本他们的MATLAB教材,然后花了5天左右的时间系统学习了一下。接着就是看他们上课用的PDF课件,绘制思维导图,列出内容提纲。下面的4道编程题来自于他们学校的MATLAB数值计算课程的考试模拟题,可以当做MATLAB练习。

    一. 已知甲苯胺的饱和蒸气压计算公式为:lnP=23.8296-3480.3/T-5.081lgT

    其中P为压力,kPa;T为温度,K。试编写一个MATLAB函数完成以下计算任务:

    1) 绘制温度在300~1000K范围内饱和蒸气压与温度的关系图,给图形加上坐标轴名

    2) 求甲苯胺的正常沸点,即饱和蒸气压等于101.325kPa时的温度,采用fprintf函数将结果(保留两位小数)输出在屏幕上。

    MATLAB代码:

    function test1
    x(1)=780;
    epsilon=1e-6;
    f=@(x)23.8296-3480.3/x-5.081*log10(x)-log(101.325)
    df=@(x)3480.3/x^2-2.2067/x
    k=1
    x(2)=x(1)-f(x(1))/df(x(1))
    while abs(x(k+1)-x(k))>epsilon
        x(k+2)=x(k+1)-f(x(k+1))/df(x(k+1))
        k=k+1
    end
    fprintf('%.2f
    ',x(k))
    

    二. 某悬浮液在25℃恒压1.12*105Pa 下进行过滤实验,得到实验数据如下:

    已知等压过滤方程为:

    式中q 为单位面积累积滤液量,m3/m2;τ 为过滤时间,s;K 和qe 为过滤常数,
    试编写一个MATLAB 函数完成以下计算:
    1)采用线性回归获得过滤常数K 和qe 的值;
    2)绘制图形表示拟合效果,给图形加上必要的注释。

    MATLAB代码:

    function test2
    q=[0.01:0.01:0.06]
    tao=[17.5 40.1 69.2 103.7 144.2 186.3]
    plot(q,tao,'bo')
    hold on
    Y=tao./q
    X=q
    p=polyfit(X,Y,1)
    K=1./p(1)
    QE=p(2)./(2*p(1))
    f=@(x)1./K*q.^2+(2./K)*QE*q
    plot(q,f(q),'k-')
    xlabel('q(单位面积累积滤液量) 单位:m^3/m^2')
    ylabel('tao(过滤时间)单位:s')
    title('25℃恒压1.12*10^5Pa下实验结果')

    三. 实验测得不同温度下两种物质A 和B 的粘度如下表所示:

    一个混合由45%的A 和55%的B 组成,混合物粘度μ 可按下式计算:

    试编写一个MATLAB 函数计算该混合物在指定温度下的粘度,要求:

    1) 温度作为该函数的输入变量;

    2) 当输入的温度值不在313~363 K 的范围内时,退出计算,并显示警告信息:

    The input temperature is not in the range, the results may not be right;

    3) 采用disp 命令将计算结果输出在屏幕上。

    MATLAB代码:

    function test3(temp)
    if temp<313 || temp>363
        disp('The input temperature is not in the range,the results may not be right')
        return
    end
    T=[313:10:363]
    miua=[653 549.2 469.7 406.0 355.0 314.8]
    miub=[393.0 365.4 339.6 315.3 292.4 270.9]
    xa=0.45
    xb=0.55
    miu=(xa*miua.^(1/3)+xb*miub.^(1/3)).^3
    xi=[313:1:363]
    y=interp1(T,miu,xi,'spline')
    disp(y(temp-T(1)+1))
    

    四. 某串联反应在间歇搅拌釜中进行,各物质的浓度CA,CB,CC,CD 和CE 与反应时间t 的关系如下:

    已知反应开始时只有 A存在,其浓度为1mol/L,试编写一个MATLAB 函数求前60s 中每隔5s 时各物质的浓度,将计算结果以下图的形式输出(注意图中各线上数据点表示方法,给图形加上坐标轴名和图例)。

    MATLAB代码:

    function test4
    [t,y]=ode45(@myfun,0:5:60,[1,0,0,0,0])
    plot(t,y(:,1),'k--o',t,y(:,2),'+:',t,y(:,3),'d-',t,y(:,4),'*:',t,y(:,5),':^')
    legend('CA','CB','CC','CD','CE')
    xlabel('Reaction Time(s)')
    ylabel('Concentraction(mol/L)')
    %------------
    function dCdt=myfun(t,y)
    K1=0.04;K2=0.05;K3=0.10;K4=0.08
    CA=y(1)
    CB=y(2)
    CC=y(3)
    CD=y(4)
    CE=y(5)
    dCAdt=-K1*CA
    dCBdt=K1*CA-K2*CB
    dCCdt=K2*CB-K2*CC
    dCDdt=K3*CC-K4*CD
    dCEdt=K4*CD
    dCdt=[dCAdt;dCBdt;dCCdt;dCDdt;dCEdt]

    运行结果:

  • 相关阅读:
    context:component-scan报错
    goland 实用键
    React-Native 指定模拟器RUN-IOS
    mac 卸载编辑器卸不干净
    go 区分指针
    go 学习Printf
    我的命令行
    mysql8的坑
    小三角
    eslint 禁用命令
  • 原文地址:https://www.cnblogs.com/guwei4037/p/12441437.html
Copyright © 2020-2023  润新知