DAY3 MATLAB学习笔记—运算方法和求积分、微分方程组通解特解数值解一元二元函数最小值零点、字符串

大于小于等于不等于:
clear all;
a=7>5
b1=rand(2,2)%产生一个元素均在0~1的2* 2矩阵,rand产生0到1的数值
b2=b1>=0.6%成立为1,不成立为0
b3=b1<0.7
c1=eq(b2,b3)%是否相等
c2=b2~=b3%是否不相等
比较大小:
clear all;
format long;
a=4.44+eps
b=4.44
c1=a= =b
c2=a>b
c3=abs(a-b)<1e-10
format short;
与或非:
clear all;
A=rand(2,2)
B=A>0.8
C=A<0.2
d1=B&c
d2=B|C
d3=~B
d4=xor(B,C)
快速逻辑与一旦第一个不成立,就不会继续运行了,但是逻辑与会继续看第二个式子:
clear all;
a=0;
(a>0)&&(6/a>3) %逻辑与(快速)
(a>0)&(6/a>4) %逻辑与
按位与、按位或:(就是挨个对比,11和10)
clear all;
a=12
b=56
c1=dec2bin(a) %转换为二进制数
c2=dec2bin(b)
d1=bitand(a,b) % 按位与
d2=dec2bin(bitand(a,b))
d3=dec2bin(bitor(a,b))
运算顺序:(建议使用括号,清晰不容易出错)
clear all;
a=3* 2>=4 %先乘法然后比较大小
b=5* 3:19 %先乘法
c=2* 4^2 %先乘方,再乘法
求积分:
quad函数求积分:(单变量数值积分求解)
clear all;
syms x;
f=inline(‘1./(sin(x)+exp(-x.^2))’) %被积函数放在内联函数中
y=quad(f,0,1.1) %积分求解
y1=quad(@myfun1,0,1.1) %用函数句柄(使用函数句柄要有一个叫myfun1的文件储存被积函数)
y2=quad(@myfun1,0,1.1,1.e-10) %精度
quadl求积分(精度更高,速度更快)
clear all;
syms x;
f=inline(‘1./(sin(x)+exp(-x.^2))’,‘x’);
y=quadl(f,0,1.1)
y1=quadl(f,0,1.1,1.e-20)
双重积分求解:
clear all;
syms x;
f=inline(‘x * cos(y)+y * sin(x)’,‘x’,‘y’);
y=dblquad(f,pi,2 * pi,0,pi)%x是(pi,2pi),y是(0,2pi)
y1=dblquad(@integrnd,pi,2 * pi,0,pi)
y2=dblquad(@(x,y) x * cos(y)+y * sin(x),pi,2 * pi,0,pi)
三重积分的求解:
clear all;
f=inline(‘z * cos(x)+y * sin(x)’,‘x’,‘y’,‘z’);
q=triplequad(f,0,pi,0,1,-1,1)
q1=triplequad(@(x,y,z) (y * sin(x)+z * cos(x)),0,pi,0,1,-1,1)
q2=triplequad(@(x,y,z) (y * sin(x)+z * cos(x)),0,pi,0,1,-1,1,1.e-10)
q3=triplequad(@(x,y,z) (y * sin(x)+z * cos(x)),0,pi,0,1,-1,1,1.e-10,@quad)
myfun1(求积分)
function y=myfun1(x)
y=1./(sin(x)+exp(-x.^2));
integrnd(二重积分)
function z= integrnd(x,y)
z=y * sin(x)+x * cos(y);
微分方程的通解:
clear all;
f1=dsolve(‘Dy-y=sin(x)’)%默认情况下以t为自变量求解,求出的C2为积分常数
f2=dsolve(‘Dy-y=sin(x)’,‘x’) % 以x为自变量求解
求微分方程的特解:
clear all;
dsolve(‘Dy=a*y’,‘y(0)=b’)%求微分方程的特解
求微分方程组:
clear all;
z=dsolve(‘Dx=y’,‘Dy=-x’)% 默认t为自变量
z.x
z.y
求解常微分方程组的数值解:
clear all;
close all;
options=odeset(‘RelTol’,1e-4,‘AbsTol’,[1e-4 1e-4 1e-5]); %设置参数(不通过odeset很多默认参数无法改变)
[t,y]=ode45(@rigid,[0 12],[0 1 1],options);
%设定起始值:时间范围0到12,rigid是方程组,变量的初始值是 0 1 1,ode45有很多替代品。
figure;
plot(t,y(:,1),’-’,t,y(:,2),’–’,t,y(:,3),’:’);
xlabel(‘Time’);
legend(‘y1’,‘y2’,‘y3’);
odeset:
odest是一个结构体(通过在Command Window输入odest可以看到)
rigid:
function dy=rigid(t,y)
dy=zeros(3,1);
dy(1)=y(2) * y(3);
dy(2)=-y(1) * y(3);
dy(3)=-0.51 * y(1)*y(2);
end
函数的极小值和零点 :
求解一元函数的最小值:
clear all;
close all;
[x,fval]=fminbnd(@cos,1,5) %函数句柄,cos函数自带的
y=cos(x)
求解自变量范围限定的一元函数的最小值:
clear all;
close all;
f=@(x)x.^2-6 * x-9;
[x,fval]=fminbnd(f,0,6,optimset(‘Display’,‘iter’))%自变量在0到6之间的最小值,显示计算过程(optimset)
y=f(x)
求多元函数的最小值:
clear all;
close all;
f=@(x)2 * (x(2)-x(1)^ 2)^ 2+(2-x(1))^2; %2个自变量一个x2一个x1
[x,fval]=fminsearch(f,[-6.7 8]) %指定一个起始点 在某点附近寻找,两个初始值x1=-6.7,x2=8
y=f(x)
求解一元函数的零点:
clear all;
close all;
f=@(x)sin(x)*cos(x); %命名函数,这个函数f(x)=sinx * cosx
figure;
fplot(f,[-5,5]); %划定范围求零点
xlabel(‘x’);
ylabel(‘f(x)’);
grid on;
x1=fzero(f,[-4,-2])%求零点
x3=fzero(f,-2)
[x4,fval]=fzero(f,[-3,-1])
字符串最基本的用法:
clc;
clear all;
str=‘I am JOEBOX’;
disp(str); %字符串显示
str_size=size(str) %字符串的长度
str(1:7)%截取字符串的一部分显示
str2=str(end1)%字符串反序输出(此处应该是’冒号-1:’),end就是倒着,倒着-1倒着-1减到第一个,如果是2就是到第二个
str_ascii=double(str)%字符串的ASCII码显示
char(str_ascii)%把刚刚的ASCII码以字符串显示
str3=‘我是真货!’; %显示汉字
str3_ascii=double(str3) %显示汉字的编码
char(str3_ascii) %把汉字的编码变成汉字
字符串的初级的用法:
clc;
clear all;
str1=‘I am from BOX,’; %字符串
str2=‘i am JOE’;
str=[str1 str2] %连接两个字符串
s=[‘Boy’; ‘boy’] %建立字符矩阵,长度相等
c=char(‘JOE’,‘BOX’) %利用char()建立字符矩阵,长度可以不相等
celldata=https://www.it610.com/article/cellstr? %建立字符串单元数组
celldata{1} %显示第一个值
字符串的中级用法(1):
clc;
clear all;
str1=‘I like reading,’;
str2=‘and you?’;
s1=[str1 str2] %连接两个字符串
s2=strcat(str1,str2) %采用函数strcat( )连接字符串
s3=strvcat(str1,str2) %把多个字符串变为矩阵
字符串的中级用法(2):
clc;
clear all;
str1=‘JOJOEB’;
str2=‘JOJOE’;
n=strcmp(str1,str2) %判断两个字符串是否相等
n1=strncmp(str1,str2,5) %判断前k个字符是否相等
n2=strncmp(str1,str2,6)
字符串的中级用法(3):
clc;
clear all;
str1=‘JOBOXE’;
str2=‘JOSHEE’;
n1=str1==str2 %对应字符是否相等
n2=str1>=str2 %字符的比较
n3=ge(str1,str2) %采用函数ge 字符的比较
字符串的查找:
clc;
clear all;
str=‘I am JoEBOX’;
n1=strfind(str,‘X’) %查找字符
n2=strfind(‘X’,str) %注意顺序,互换就找不到了(上条找得到,这条不可以)
n3=strfind(str,‘am’) %查找字符串
n4=strfind(str,‘Am’) %区分大小写,找不到
n5=strfind(str,’ ') %查找空格
字符串的替换
clc;
clear all;
str=‘I am JOEBOX’;
s1=strrep(str,‘JOEBOX’,‘JOEVAE’) %字符串替换
s2=strrep(str,‘joebox’,‘JOEBOX’) %如果没有找到,输出为原来的字符串
【DAY3 MATLAB学习笔记—运算方法和求积分、微分方程组通解特解数值解一元二元函数最小值零点、字符串】clc;
clear all;
t1=num2str(randn(3,3)) %将数字转换为字符串
pi=num2str(pi,5) %只显示6位
t2=int2str(randn(3,3)) %先取整,然后转换为字符串
x1=str2num(t2) %将字符串矩阵转换为数字矩阵
x2=str2double(‘82+96i’) %将字符串转换为双精度数值
进制转换:
clc;
clear all;
b=dec2bin(123) %将十进制数转换为二进制
h=dec2hex(34) %将十进制数转换为十六进制
d1=hex2dec(‘2B’) %将十六进制转换为十进制
d2=bin2dec(‘1100001’) %将二进制转换为十进制
clc;
clear all;
str=‘I am JOEBOX’;
isspace(str) %挨个检测是否为空格
isletter(str) %挨个检测是否为字母
执行字符串语句:
clc;
clear all;
x=0:pi/20:2 * pi;
str=‘figure; y=sin(x); plot(x,y); legend(’‘sinx’’)’;
eval(str);
clc;
clear all;
str=‘I am JOEBOX’
s1=upper(str) % 全部变成大写
s2=lower(str) % 全部变成小写
x=[1 2 3];
y1=ischar(str) %判断是不是字符串
y2=ischar(x) %x是矩阵不是字符串
help:strfun
在command window输入可以显示所有的关于字符串的函数
今天用来超级多的星号导致文字最后的文字版全部没有星号而且字体不一样。。
改了很久,打了很多空格,裂开了
还有一些疑问,明天起来整理补充

    推荐阅读