weixin_55201368 2023-03-06 21:24 采纳率: 100%
浏览 38
已结题

求直线与曲线交点编程问题

请教一下大家,关于直线和曲线交点的问题,这个程序哪里出错了呢,怎么修改?

Ny=200;%输入光线取样数量
Y=[];
Z=[];
for i=1:Ny
   beta=70;
   v(i)=beta*(i/Ny);
   k(i)=tand(v(i));
% 定义直线和曲线的函数
line12_func = @(x12) k(i)*x12;
curve12_func = @(x12) - 1.206e-06*(x12-4)^3 + 0.01432*(x12-4)^2 - 0.001057*(x12-4) - 17.46;
% 将两个函数相减,得到它们的交点
func12 = @(x12) line12_func(x12) - curve12_func(x12);
% 使用 fzero 求解交点
x0 = [39,209.094981273047];  % 从x=39开始搜索交点
x12_intersect = fzero(func12, x0);
% 输出交点的坐标
y12_intersect = line12_func(x12_intersect);
Y=[Y,x12_intersect];
Z=[Z,y12_intersect];
plot(x12_intersect, y12_intersect,'*')
hold on
end
hold on


  • 写回答

2条回答 默认 最新

  • CodeBytes 2023-03-06 22:05
    关注

    该回答引用ChatGPT

    这个程序中的问题是,每次循环迭代时,直线和曲线的函数都是一样的,只有函数的参数不同,因为它们依赖于循环变量 i。然而,由于使用 fzero 求解交点的过程是迭代过程,因此在每次迭代时都重新定义直线和曲线的函数会导致迭代过程不收敛或者收敛非常慢。

    为了解决这个问题,可以将直线和曲线的函数定义移到循环之外,然后在循环内仅仅更新函数的参数即可,如下所示:

    
    Ny=200; % 输入光线取样数量
    Y=[];
    Z=[];
    beta=70;
    k_func = @(v) tand(v);
    line12_func = @(k, x12) k*x12;
    curve12_func = @(x12) - 1.206e-06*(x12-4)^3 + 0.01432*(x12-4)^2 - 0.001057*(x12-4) - 17.46;
    func12 = @(k, x12) line12_func(k, x12) - curve12_func(x12);
    for i=1:Ny
        v=beta*(i/Ny);
        k=k_func(v);
        % 使用 fzero 求解交点
        x0 = [39,209.094981273047];  % 从x=39开始搜索交点
        x12_intersect = fzero(@(x12) func12(k, x12), x0);
        % 输出交点的坐标
        y12_intersect = line12_func(k, x12_intersect);
        Y=[Y,x12_intersect];
        Z=[Z,y12_intersect];
        plot(x12_intersect, y12_intersect,'*')
        hold on
    end
    hold on
    
    

    在修改后的程序中,直线和曲线的函数被定义成匿名函数,它们的参数分别为 k 和 x12,x12 是自变量。在每次循环迭代时,仅更新函数的参数 k,然后将更新后的函数传递给 fzero 进行迭代求解。这样,迭代过程就不会被重新定义函数所干扰,收敛速度会更快。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月15日
  • 已采纳回答 3月7日
  • 修改了问题 3月6日
  • 创建了问题 3月6日

悬赏问题

  • ¥15 PointNet++的onnx模型只能使用一次
  • ¥20 西南科技大学数字信号处理
  • ¥15 有两个非常“自以为是”烦人的问题急期待大家解决!
  • ¥30 STM32 INMP441无法读取数据
  • ¥15 R语言绘制密度图,一个密度曲线内fill不同颜色如何实现
  • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
  • ¥15 用visualstudio2022创建vue项目后无法启动
  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥500 把面具戴到人脸上,请大家贡献智慧,别用大模型回答,大模型的答案没啥用
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。