双曲正割matlab求解

sech x=4\pi\sum_{n=1,3,5}^{N\rightarrow \propto }\frac{n(-1)^{(n-1)/2}}{(n\pi)^2+4x^2},取N=305,且x在0\leq x\leqslant 2区间内按照5等分取值。

        matlab中对于双曲正割函数可以直接用sech求解,自己编代码的过程永远无法逃避,,因为这个有现成的,那个可能没有,遇到棘手复杂的任务,全靠现成调包,估计完犊子。。。

        先解决N的问题,根据题目描述,N是从1开始,步长为2递增,一直到305.

nn=1:2:305;%将n从1到305,按步长为2生成序列,这是一个1x153的行向量

        x也可以用冒号表达式生成,但是有一点麻烦,就是得自己去算步长,本题要求的是区间内5等分,可以直接用linspace完成

xx=linspace(0,2,5)%0代表起始,2代表停止,5是这之中要几个数。这是一个1x5的行向量

现在我们有了nn,xx两个行向量,他们的维度不同。观察公式的分式部分,如果直接用这两个行向量去进行运算

s=4*pi*sum(n.*(-1).^((n-1)/2)./((pi*n).^2+4*x.^2))

matlab就会报错,因为公式内部的各成分维度不同,那么怎么搞?答:举手投降。。。不可能的

我们接着看,有没有什么办法,让这两个变量初始元素不便,行数或者列数达到和谐,这样子不就解决了维度不同无法运算的问题了么。

学matlab肯定都知道有个repmat方法,回忆以下,repmat(v,1,3)意思是把元素v复制,生成1行3列的形式,那如果我是要复制一个向量,比如说nn或者vv若干次呢?直接套吧,就这,,,

n=repmat(nn,5,1)%生成一个5x153的新的n
x=repmat(xx,153,1)%生成一个135x5的新的x

现在回头看看n和x是不是有能够运算的可能了?我们已经成功的把一对情侣从亲兄妹变成了陌生人,现在他们可以结合了,我们一起为伟大的爱情干杯。

s=4*pi*sum(n.*(-1).^((n-1)/2)./((pi*n).^2+4*x.^2))

运行这一段发现,matlab提示“秩亏。。。。”,吃亏是福,秩亏可是祸,,,九芝堂。。唉。。治不了

让我们重新看看新矩阵x和n,他们俩为什么会导致运算报错,因为这个式子里他俩需要维度一摸一样。。。那就重新生成吧,不就是加一个转置而已。又有问题了,一摸一样有两种,一种是5x153,一种是153x5。按两种分别来做,然后看看与内置函数的结果有什么不同吧。

%%方式一
clear all;
clc
nn=1:2:305;
xx=linspace(0,2,5);
n=(repmat(nn,5,1))';
x=repmat(xx,153,1);
s=4*pi*sum(n.*(-1).^((n-1)/2)./((pi*n).^2+4*x.^2))

结果是

s =

    1.0021    0.8889    0.6501    0.4272    0.2679

%%方式二
clear all;
clc
nn=1:2:305;
xx=linspace(0,2,5);
n=repmat(nn,5,1);
x=(repmat(xx,153,1))';
s=4*pi*sum(n.*(-1).^((n-1)/2)./((pi*n).^2+4*x.^2))

结果是

s=一大堆,有153列,很明显我们要的结果是方式一。

se=sech(xx)%用内置函数求解
compare=[s' se']%对比自己编写的求解和内置求解

结果是


compare =

    1.0021    1.0000
    0.8889    0.8868
    0.6501    0.6481
    0.4272    0.4251
    0.2679    0.2658

也不能说是一摸一样吧,至少有点关系,就这吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值