关于MATLAB的问题

2024-05-13

1. 关于MATLAB的问题

第一个式子中的'
是转置的意思,实际上就是将原先的x行向量转成列向量,就这个程序而言,行向量和列向量都不会影响最后的画图plot,所以加不加无所谓
第二个式子楼主检查一下是不是发错了
第四个式子是表示
x1
中的元素分别取0,1,2,……,12然后再除以2,即
x1=[0,1/2,1,3/2,…,6]
需要说明的是,MATLAB中的
:
一般是表示循环,他的格式一般为a:b:c,其中a为初始值,b为步长,c为终止值,类似C语言中的,for(i=a;i≤c;i=i+b)
若b缺省,即为a:c,就表示默认步长为1。
以第一个x为例,x=(0:pi/100:2*pi),就表示一个行向量
x=[0,pi/100,2*pi/100,3*pi/100,…,2*pi],以后如果出现矩阵,经常还会出现类似a[1:20,3:15]之类的写法,实际上也就是表示矩阵a中从第1行到第20行,第3列到第15列的元素。
最后补充:注意类似的式子y2=2*exp(-0.5*x).*sin(2*pi*x);中的“.*”,不用*是因为x在这里是一个向量(矩阵),如果用*仅仅会表示向量的乘法,一般会提示你什么维数不匹配什么的错误,实际上就是因为这里的y2实际上想进行的是元素级的运算,即x中的每一个元素进行一些操作得到一个y2值,故采用了“.*”表示是x中的元素进行操作。

关于MATLAB的问题

2. 关于matlab的一个问题

  因为x是一个单维的数,在计算不同k的时候x的值不停的在变,得到最后结果是k=10的时候x = -1.2246e-016。所以画图的时候得到91个x = -1.2246e-016的点。
!!!注意若“x=sin(k*pi);”,此时matlab认为x是维数1×91的向量。!!!

此时修改可以用两种方法。
传统方法,仍使用plot画图,此时需考虑如何将“x=sin(k*pi)/k”中x改为维数1×91的向量。
程序修改为:
i=1;
for k=1:0.1:10
    x(i)=sin(k*pi)/k;
    i=i+1;
end
figure
k=1:0.1:10;
plot(k,x)
运行结果:

改用ezplot画图。
程序为:     
syms k
x=sin(k*pi)/k;
figure
ezplot(x,[1,10])
结果如图:

具体程序见附件。
参考百度百科:http://baike.baidu.com/link?url=bjr7qYikkyoO6NAJjIy1GoEN5f2Bdx52swkdvcQY6g1DMlN3QVia-Y5FZWxCH6I6-kooNCwCRTzxDLShWF7zZ_

3. 关于MATLAB的一些问题

给你介绍两种方法吧
第一种是比较直观的循环的方法,不过循环的速度是相对第二种方法比较慢的(对于你这个程序来说差不了多少),具体程序如下:

x=[1:25]; % 这是把你的数写成一个行向量的形式
r=zeros(25);
for index1=1:25
    for index2=1:25
        r(index1,index2)=x(index1)-x(index2);
    end
end

第二种方法为了避免用循环,咱使用矩阵的形式。
x=[1:25]; % 这是把你的数写成一个行向量的形式
a=repmat(x',[1,25]);
b=repmat(x,[25,1]);
result=a-b;

这两种得到的结果是相同的,我让x=[1:25];进行了一下验证,结果如下图: 


关于MATLAB的一些问题

4. 关于MATLAB的问题

>> syms x
>> solve(x^3-8*x^2+19*x-12-((1/2)*x^2-x-1/8))
 
ans =  [0.9043633015]
           [2.660875389 ]
           [4.934761310 ]
即原题有三个实数解。

5. MATLAB问题

第四题
a = 100:1:200;a(mod(a,7)==0)第五题
clc;clearsyms x y = x*sin(x);y2 = int(y,0,x);x1 = 0:0.1:4;yy1 = zeros(size(x1));yy2 = zeros(size(x1));for i =1:1:numel(x1)yy1(i) = eval(subs(y,x,x1(i)));yy2(i) = eval(subs(y2,x,x1(i)));endplot(x1,yy1,'r-.')hold onplot(x1,yy2,'b--')legend('x*sin x','\int_0^x{t*sin t}dt')

MATLAB问题

6. MATLAB问题

不知道你的学历水平是什么样的,我尽量简单说
普通积分:
一般来说是找到被积函数的原函数,然后把上下限带入求值(定积分)
得到的解是精确解
参见大学课程:《高等数学》
在matlab中可用函数:int(),求解
数值积分:
由于在实际工程中绝大多数的积分都无法找到原函数
所以,想要得到精确解很困难
为了能够算出结果一些大牛(牛顿,高斯等等)搞出了数值解
即:数值积分(与精确解的误差满足需要)
具体的方法有很多比如:
梯形公式;辛普森公式;递归公式;龙贝格积分;自适应积分;高斯-勒让德积分等等
参见研究生课程:《数值分析》
在matlab中自带了一些求数值积分的函数:
trapz():基于复化梯形公式
integral():求解一元数值积分
integral2():求解一般区域二重积分数值解
integral3():求解一般区域三重积分数值解
我个人最常使用——高斯求积法求数值积分
一般来说取10-20个高斯点即可得到足够精度的数值解
最后:请叫我雷锋!

7. 有关MATLAB的一个初学者问题

数组的点积运算函数C=dot(A,B,dim),这个dim是灰色维度操作。
当dim=1时,C值以行的形式出现(默认)。
当dim=2时,C值以列的形式出现。
当dim=3时,C值以多维的形式出现。
例如:

有关MATLAB的一个初学者问题

8. 一个关于matlab的问题

(1)冒号生成法 a:inc:b。其中 inc可以省略,默认为1.所以1:4 就是生成 1 2 3 4 
complex(实数,虚数)所以complex(1:4,2:5)和complex(1:2,2:3)的结果如题
(2)‘,’和‘;’的区别。,表示数元素的分隔。‘;’表示行与行之间的分隔。所以,,[1:3,3:5]和[1:3;3:5]的结果是1×6和2×3的矩阵
(3)cell
元胞数组是MATLAB的一种特殊数据类型,可以将元胞数组看做一种无所不包的通用矩阵,或者叫做广义矩阵。组成元胞数组的元素可以是任何一种数据类型的常数或者常量,每一个元素也可以具有不同的尺寸和内存占用空间,每一个元素的内容也可以完全不同,所以元胞数组的元素叫做元胞(cell)。和一般的数值矩阵一样,元胞数组的内存空间也是动态分配的。
cell的每个单元都可以存储任何数据,比如传递函数等。当然,存储矩阵更是没有问题的了。但是用cell数据类型之前,要先初始化。
a=cell(n,m)
那么就把a初始化为一个n行m列的空cell类型数据。
如何赋值呢?
a{1,1}=rand(5)
那么a的1行1列的单元中存储的就是一个随机的5×5的方阵了。
那么要用第一个单元中的方阵中的某个值呢?
可以如下引用:a{1,1}(2,3)
就可以了,引用cell单元时要用{},再引用矩阵的某个数据就要用()了。
cell单元中的每个单元都是独立的,可以分别存储不同大小的矩阵或不同类型的数据。
下面举个例子:
a=cell(2,2);%预分配
a{1,1}='cellclass';
a{1,2}=[1 2 2];
a{2,1}=['a','b','c'];
a{2,2}=[9 5 6];
>> a{1,1}
ans =
cellclass
>> a{1,2}
ans =
     1     2     2
>> a{2,:}
ans =
abc
ans =
     9     5     6
>> b=a{1,1}
b =
cellclass
最新文章
热门文章
推荐阅读