MATLAB实验四

文章介绍了使用MATLAB进行多项式方程求根、分数序列的循环迭代求和、分段函数的实现以及字符串处理的脚本示例,包括检查参数输入、输出以及创建单元数组和结构体来管理学生成绩。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.求方程2x5−3x3+71x2−9x+13=02x^5-3x^3+71x^2-9x+13=02x53x3+71x29x+13=0 的全部根

>> p=[2 0 -3 71 -9 13];
>> pkg load symbolic
>> poly2sym(p)
Symbolic pkg v3.0.0: Python communication link active, SymPy v1.10.1.
ans = (sym)

     5      3       2
  2*x  - 3*x  + 71*x  - 9*x + 13

>> roots(p)
ans =

  -3.4914 +      0i
   1.6863 + 2.6947i
   1.6863 - 2.6947i
   0.0594 + 0.4251i
   0.0594 - 0.4251i

2.有一分数序列∶2/1,3/2,5/3,8/5,13/8,21/13…采用循环迭代求出这个数列的前n项之和。要求编写M函数∶function y=myFun(varargin)。函数要求能够自动判断输入输出参数的个数,并能够进行参数的判断∶

1)如果用户没有输入参数,默认n=20

2)若用户输入的参数大于1个,则取第一个参数信息,提示用户舍弃后面的参数。

3)如果用户没有输出参数,则在函数中用printf命令直接打印结果。

4)如果用户有一个输出参数,则将结果返回给输出参数,不用printf打印结果。

%方法一
function y=myFun(a,b)
   sum=t=0 ;
   fz=2;
   fm=1;
   i=1;
  if nargin==0
    n = 20;
  elseif nargin>=1
    n=a;
  end
  while i<=n
      sum=sum+fz/fm;
      t=fz;
      fz=fm+fz;
      fm=t;
      i++;
   end
  if nargout==0
    printf('%d',sum)
   elseif nargout==1
    y=sum
   end

image-20220922092909522

%方法二
function varargout=myfun(varargin)
  a=[2 3];
  b=[1 2];
  s=0;
  if nargin==0
    n=20;
  else
    n=varargin{1};
  end
  for i=1:n
    if(i>=3)
      a(i)=a(i-1)+a(i-2);
      b(i)=b(i-1)+b(i-2);
     end
     s=s+a(i)/b(i);
  end
  if nargout==0
    fprintf("s=%f\n",s);
  else
    varargout{1}=s;
  end
end

3、写一个函数,实现分段表达式:
f(x)={0.5xx≤21.5−0.25x2<x<60.5x≥6 f(x)=\begin{cases} 0.5x & x \le 2\\ 1.5-0.25x & 2<x<6 \\ 0.5 & x \ge 6 \end{cases} f(x)=0.5x1.50.25x0.5x22<x<6x6
调用此函数并求解x=0、5、10时的函数值。

function y=f(x)
  if x<=2
    y=0.5*x;
  elseif x>2 & x<6
    y=1.5-0.25*x;
  elseif x>=6
    y=0.5;
  end

>> f(0)
ans = 0
>> f(5)
ans = 0.2500
>> f(10)
ans = 0.5000

4.编写一个脚本,查找给定字符串中指定字符出现的次数和位置。

function [c,p]=fs(str,s)
  p=find(str==s)
  c=length(p)
end

>> s='How much wood would a woodchuck chuck?';
>> fs(s,'h')
p =

    8   28   34

c = 3
ans = 3

5.编写一个脚本,判断输入字符串中每个单词的首字母是否为大写。若不是,则将其修改为大写,其他字母为小写。

%方法一
str='How much wood would a woodchuck chuck?'
s_length=length(str)
for k=1:s_length
    if(k==1||isspace(str(k-1)))&&(str(k)<='z'&& str(k)>='a')
        str(k)=char(double(str(k))-32);
    end
end
disp(str)%
>> daxiaoxie
                                                                                   
str = How much wood would a woodchuck chuck?
s_length = 38
How Much Wood Would A Woodchuck Chuck?
%方法二
a='How much wood would a woodchuck chuck?'
a1=lower(a);
i=isspace(a);
inx=[1,find(i)+1];
a1(inx)=upper(a1(inx));
%a1(inx)=(a(inx)-32);

方法二先将所有的字母转化为小写字母,然后找到空格的位置,然后再找到首字母的位置,再讲首字母大写。

6.创建2×2的单元数组,第1和第2个元素为字符串,第3个元素为整型变量,第4 个元素为双精度(double)类型。

% 直接创建法
>> A(1,1)={'abc'};
>> A(1,2)={'def'};
>> A(2,1)={int8(1)};
>> A(2,2)={double(5)};
>> A
A =
{
  [1,1] = abc
  [2,1] = 1
  [1,2] = def
  [2,2] = 5
}

7.创建一个结构体,用于统计10个学生的情况,包括学生的姓名、学号、英语成绩等。然后使用该结构体对一个班级的学生成绩进行管理,如计算总分、平均分、排列名次等。

student=struct('name',{'zhangsan','lisi','wangwu','Tom','Mike','John','guoyuan','liuneng','yutian','Alan'},
'no',{'001','002','003','004','005','006','007','008','009','010'},
'score',{[60 50 70],[70 80 90],[80 70 70],[66 75 80],[77 88 90],[80 90 60],[60 85 73],[68 87 76],[85 69 62],[60 55 78]});
%计算成绩总和、平均分
for i=1:10
  s(i)=sum(student(i).score);
  m(i)=mean(student(i).score);
end
s
m
%根据平均值进行排序,输出排序后的学号
[snew,index]=sort(m);
for i=index
  student(i).no
end

>> student_struct

s =

   180   240   220   221   255   230   218   231   216   193

m =

   60.000   80.000   73.333   73.667   85.000   76.667   72.667   77.000   72.000   64.333

ans = 001
ans = 010
ans = 009
ans = 007
ans = 003
ans = 004
ans = 006
ans = 008
ans = 002
ans = 005

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

W_chuanqi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值