q = [0 0];m = length(q); p = [-100 -200];n = length(p); q = q'; p = p'; f = 0:0.1:1000; w = f*(2*pi); y = 1i*w; if n == 0 yq=ones(m,1)*y; vq=yq-q*ones(1,length(w)); bj=abs(vq); ai=1; elseif m==0 yp=ones(n,1)*y; vp=yp-p*ones(1,length(w)); ai=abs(vp); bj=1; else yq=ones(m,1)*y; yp=ones(n,1)*y; vq=yq-q*ones(1,length(w)); vp=yp-p*ones(1,length(w)); bj=abs(vq); ai=abs(vp); end Hw=prod(bj,1)./prod(ai,1); plot(f,Hw); title('幅频响应曲线'); xlabel('w');ylabel('F(jw)');
时间: 2023-05-25 10:01:48 浏览: 68
这段代码用于计算一个系统的幅频响应曲线。首先定义了两个向量q和p,分别代表系统中的零点和极点。然后根据这两个向量的长度来判断系统是有限脉冲响应还是无限脉冲响应。接着生成一段频率范围内的复数向量y,并通过这个向量计算系统的传递函数Hw。最后将频率范围f和传递函数Hw进行画图。
相关问题
#include<iostream> #include<algorithm> #include<string> #include<cmath> using namespace std; struct node { char n = 0; node* next = nullptr; }; node* shuru(string a) { node* head = new node{ 0,NULL}; node* p; int m; m= a.length(); p = head; for(int i=m-1;i>=0;i--) { node* q = new node; p->next = q; q->n = a[i]; p = q; q->next = nullptr; } return head; } void show(node* m) { m = m->next;//head是默认值,不show while (m!=nullptr) { cout << m->n; m = m->next; } } node* add(node* a, node* b) { node* add, * head = new node{ 0,NULL }, * tail; node* p, * q; p = a; q = b; tail = head; if ((a->n == '-' && b->n != '-') || (b->n == '-' && a->n != '-')) { } else if (a->n != '-' && b->n != '-') { int carry = 0; while (1) { int val = 0; if (p) { val += p->n - '0'; p = p->next; } if (q) { val += q->n - '0'; q = q->next; } /*if (p && q == nullptr) { val += p->n - '0'; p = p->next; } if (q && p == nullptr) { val += q->n - '0'; q = q->next; }*/ val = val + carry; if (val == 0) break; add = new node{ val % 10+'0' ,NULL}; carry = val / 10; tail->next = add; tail = add; } return head; } else { add = new node{ '-',NULL }; tail->next = add; } } int main() { int a; cin >> a; for (int i = 0; i <a; i++) { string m, n; cin >> m >> n; show(add(shuru(m), shuru(n))); } }为什么输出很奇怪
这段代码的输出很奇怪是因为在输出结果时,没有换行符。可以在 `show` 函数中添加一个换行符,如下所示:
```c++
void show(node* m) {
m = m->next;
while (m != nullptr) {
cout << m->n;
m = m->next;
}
cout << endl; // 添加换行符
}
```
这样就可以在输出结果后换行,使输出结果更加清晰易读。
为以下MATLAB代码添加注释:function [h,l]=huffman(p) if (length(find(p<0))~=0) error('not a prob ,negative component'); end if (abs(sum(p)-1)>10e-10) error('not a prob vector, component do not add to 1') end n=length(p); q=p; m=zeros(n-1,n); for i=1:n-1 [q,l]=sort(q); m(i,:)=[l(1:n-i+1),zeros(1,i-1)]; q=[q(1)+q(2),q(3:n),1]; end for i=1:n-1 c(i,:)=blanks(n*n); end c(n-1,n)='0'; c(n-1,2*n)='1'; for i=2:n-1 c(n-i,1:n-1)=c(n-i+1,n*(find(m(n-i+1,:)==1))-(n-2):n*(find(m(n-i+1,:)==1))); c(n-i,n)='0'; c(n-i,n+1:2*n-1)=c(n-i,1:n-1); c(n-i,2*n)='1'; for j=1:i-1 c(n-i,(j+1)*n+1:(j+2)*n)=c(n-i+1,n*(find(m(n-i+1,:)==j+1)-1)+1:n*find(m(n-i+1,:)==j+1)); end end for i=1:n h(i,1:n)=c(1,n*(find(m(1,:)==i)-1)+1:find(m(1,:)==i)*n); ll(i)=length(find(abs(h(i,:))~=32)); end l=sum(p.*ll);
```matlab
function [h,l]=huffman(p)
% 检查概率向量是否合法
if (length(find(p<0))~=0)
error('not a prob ,negative component');
end
if (abs(sum(p)-1)>10e-10)
error('not a prob vector, component do not add to 1')
end
n=length(p);
q=p;
m=zeros(n-1,n);
% 构建哈夫曼树
for i=1:n-1
[q,l]=sort(q);
m(i,:)=[l(1:n-i+1),zeros(1,i-1)];
q=[q(1)+q(2),q(3:n),1];
end
% 构建哈夫曼编码
for i=1:n-1
c(i,:)=blanks(n*n);
end
c(n-1,n)='0';
c(n-1,2*n)='1';
for i=2:n-1
c(n-i,1:n-1)=c(n-i+1,n*(find(m(n-i+1,:)==1))-(n-2):n*(find(m(n-i+1,:)==1)));
c(n-i,n)='0';
c(n-i,n+1:2*n-1)=c(n-i,1:n-1);
c(n-i,2*n)='1';
for j=1:i-1
c(n-i,(j+1)*n+1:(j+2)*n)=c(n-i+1,n*(find(m(n-i+1,:)==j+1)-1)+1:n*find(m(n-i+1,:)==j+1));
end
end
% 返回哈夫曼编码和平均编码长度
for i=1:n
h(i,1:n)=c(1,n*(find(m(1,:)==i)-1)+1:find(m(1,:)==i)*n);
ll(i)=length(find(abs(h(i,:))~=32));
end
l=sum(p.*ll);
```
这段代码实现了哈夫曼编码的过程。下面是每行代码的注释:
```matlab
function [h,l]=huffman(p)
% 检查概率向量是否合法
if (length(find(p<0))~=0)
error('not a prob ,negative component');
end
if (abs(sum(p)-1)>10e-10)
error('not a prob vector, component do not add to 1')
end
n=length(p);
q=p;
m=zeros(n-1,n);
% 构建哈夫曼树
for i=1:n-1
[q,l]=sort(q);
m(i,:)=[l(1:n-i+1),zeros(1,i-1)];
q=[q(1)+q(2),q(3:n),1];
end
% 构建哈夫曼编码
for i=1:n-1
c(i,:)=blanks(n*n);
end
c(n-1,n)='0';
c(n-1,2*n)='1';
for i=2:n-1
c(n-i,1:n-1)=c(n-i+1,n*(find(m(n-i+1,:)==1))-(n-2):n*(find(m(n-i+1,:)==1)));
c(n-i,n)='0';
c(n-i,n+1:2*n-1)=c(n-i,1:n-1);
c(n-i,2*n)='1';
for j=1:i-1
c(n-i,(j+1)*n+1:(j+2)*n)=c(n-i+1,n*(find(m(n-i+1,:)==j+1)-1)+1:n*find(m(n-i+1,:)==j+1));
end
end
% 返回哈夫曼编码和平均编码长度
for i=1:n
h(i,1:n)=c(1,n*(find(m(1,:)==i)-1)+1:find(m(1,:)==i)*n);
ll(i)=length(find(abs(h(i,:))~=32));
end
l=sum(p.*ll);
```
第2-4行注释解释了对概率向量 `p` 的合法性进行了检查,第6-8行注释解释了计算元素个数和概率和是否为1的条件,第10-12行注释解释了计算哈夫曼树的过程,第14-28行注释解释了构建哈夫曼编码的过程,第30-34行注释解释了计算平均编码长度的过程。这些注释可以让其他人更容易地理解代码的作用和实现方式。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)