用matlab求解一元三次方程,看不明白结果

用matlab求解一元三次方程,结果长这样,请问怎么看啊?看不明白这个结果

img

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7749059
  • 这篇博客也不错, 你可以看下用matlab实现,给定三个边长,看看它们是否能构成一个三角形
  • 你还可以看下matlab参考手册中的 matlab 显示数组详细信息 details
  • 除此之外, 这篇博客: 【Matlab学习手记】标签显示在刻度之间中的 问题:Matlab标签和刻度线默认是对齐的,如何将标签设置到刻度线之间? 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    三个实例。

    • plot类型
    clear; clc;
    x = 0:0.1:2*pi;
    y = sin(x);
    plot(x, y)
    set(gca, 'yticklabel', [])  % 清空默认的标签 
    yLabels = {'one', 'two', 'three', 'four', 'five'};  % 待添加的标签
    for i = 1 : length(yLabels)
        text(-0.5, -1.25+0.4 * i, yLabels(i));   % 用文本的方式添加,位置可以自定义
    end

    得到以下结果:

    • surf类型

    surf绘图时,显示出来的网格数量总是比数据维度少1(网格线数量和维度对应),因此,如果想显示出和数据维度一样数量的网格,就必须将数据的行和列都扩充1了。

    clear;clc;
    load data;
    [x_num,y_num]=size(data);
    x_coord=1:x_num;
    y_coord=1:y_num;
    data2(x_coord, y_coord) = double(data); 
    data2(:, y_num + 1) = data(:, end);
    data2(x_num + 1, 1:end-1) = data(end, :);
    data2(x_num + 1, y_num + 1) = data(end, end);
    surf(data2);
    % contour(data2,'ShowText','on')
    axis off   % 不显示坐标轴
    % shading interp
    view([0,90]);
    for i = 1 : y_num
        text(0.25 + i,0.5, num2str(i));
    end
    for i = 1 : x_num
        text(0.25,0.5 + i, num2str(i));
    end

    运行代码得到以下图形:

    如果不喜欢网格线,只需要将shading interp取消注释即可。

    如果是等高线图呢,略有区别。

    clear;clc;
    load data;
    [x_num,y_num]=size(data);
    x_coord=1:x_num;
    y_coord=1:y_num;
    data2(x_coord, y_coord) = double(data); 
    data2(:, y_num + 1) = data(:, end);
    data2(x_num + 1, 1:end-1) = data(end, :);
    data2(x_num + 1, y_num + 1) = data(end, end);
    % surf(data2);
    contourf(data2,'ShowText','on')
    % contour(data2,'ShowText','on')
    set(gca, 'xticklabel', [])  
    set(gca, 'yticklabel', [])
    shading interp
    view([0,90]);
    for i = 1 : y_num
        text(0.25 + i,0.5, num2str(i));
    end
    for i = 1 : x_num
        text(0.25,0.5 + i, num2str(i));
    end

    运行代码得到以下图形:

     

  • 您还可以看一下 硬核野生技术咨询客服小李老师的matlab零基础入门路径规划城市遍历机器人路径等问题课程中的 数据显示格式、逻辑值等小节, 巩固相关知识点
  • 以下回答来自chatgpt:

    Matlab已经内置了一元三次方程求解的函数"roots",使用该函数可以得到方程的根。但是由于一元三次方程的根较为复杂,因此输出结果可能会较为难懂。为了更好地理解输出结果,我们可以进行以下步骤:

    % 定义一元三次方程的系数
    a = 1;
    b = -6;
    c = 11;
    d = -6;
    
    % 求解方程
    roots([a b c d])
    

    首先,我们需要定义一元三次方程的系数。这里我们定义a=1,b=-6,c=11,d=-6。然后使用"roots"函数求解方程。需要注意的是在Matlab中使用"roots"函数时,输入的系数必须是向量形式。

    输出结果可能会是以下形式:

    ans =
    
       2.0000
       1.0000
       3.0000
    

    这个结果表示方程的三个根分别为2,1和3。其中第一个数字是第一个根,依此类推。可以看到这个输出结果已经相对简单易懂了。但是,有可能输出结果是复数形式。这时我们需要将复数形式转换为常规形式,即a+bi的形式。可以使用"real"和"imag"函数来分别获取实部和虚部,并将其转换为常规形式:

    r = roots([a b c d]);
    
    for i=1:length(r)
        if imag(r(i)) ~= 0
            fprintf("x%d = %.2f + %.2fi\n", i, real(r(i)), imag(r(i)));
        else
            fprintf("x%d = %.2f\n", i, r(i));
        end
    end
    

    以上代码使用了一个for循环,对每个根进行分析,并针对不同的情况输出不同的结果。如果根是实数,那么只输出实数部分即可。如果根是复数,那么需要输出实数部分和虚数部分。

    最终的输出结果可能是这样的:

    x1 = 2.00
    x2 = 1.00
    x3 = 3.00
    

    或者是这样的:

    x1 = 1.00 + 0.00i
    x2 = 2.00 + 0.00i
    x3 = 1.00 + 1.00i
    

    以上就是解读一元三次方程输出结果的方法。如果还有不清楚的地方,可以先尝试输出默认结果,再根据需要进行格式化输出。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^