How do I avoid using if and else statements in this code
2 次查看(过去 30 天)
显示 更早的评论
I want to rewrite this code but without if and else statements. I just want to enhance convergence rate
for i=1:N-1
for j=1:M-1
A(i+(M-1-j)*(N-1),i+(M-1-j)*(N-1))=-2/dx^2-2/dy^2;
B(i+(M-1-j)*(N-1))=B(i+(M-1-j)*(N-1))-(cos(x(i)+y(j))+cos(x(i)-y(j)));
if i==1
B(i+(M-1-j)*(N-1))=B(i+(M-1-j)*(N-1))-cos(y(j))/dx^2;
else
A(i+(M-1-j)*(N-1),i-1+(M-1-j)*(N-1))=1/dx^2;
end
end
end
3 个评论
Ameer Hamza
2020-5-1
Can you write down the equation you are trying to implement with these for loops?
采纳的回答
Vimal Rathod
2020-5-5
Hi,
If your main goal is to remove the if else statements from the code, you can write the following code first and then write the main for loop with i starting from 2 instead on one and remove the if statement and keep the statement in the else condition.
i = 1;
for j=1:M-1
A(i+(M-1-j)*(N-1),i+(M-1-j)*(N-1))=-2/dx^2-2/dy^2;
B(i+(M-1-j)*(N-1))=B(i+(M-1-j)*(N-1))-cos(y(j))/dx^2;
end
for i=2:N-1
for j=1:M-1
A(i+(M-1-j)*(N-1),i+(M-1-j)*(N-1))=-2/dx^2-2/dy^2;
B(i+(M-1-j)*(N-1))=B(i+(M-1-j)*(N-1))-(cos(x(i)+y(j))+cos(x(i)-y(j)));
A(i+(M-1-j)*(N-1),i-1+(M-1-j)*(N-1))=1/dx^2;
end
end
if you want to further optimize you can vectorize the first loop.
Hope this helps!
6 个评论
Rik
2020-5-7
I wouldn't personally care how my code would solve the equations. The more time you put in, the more you can optimize your code. At some point you get to a stage where you need to put in an unreasonable amount of time. Then I would stop.
Are you really sure you simply want to avoid an if/else block? That doesn't make sense to me.
What toolboxes relating to diff equations do you have available?
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 PDE Solvers 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!