用MATLAB实现重载算子

2024-09-30 01:36:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在编写一个代码,在MATLAB中执行高斯消去,然后写出生成一个显示所有步骤的LaTex文件所需的代码。很多时候,当我做高斯消去法时,答案开始变成分数。所以我想作为一个很好的学习练习,我会写一个分数类。但我不知道如何重载运算符,坦率地说,Mathwork的文档没有帮助。你知道吗

classdef Fraction

properties
    numer
    denom
end

methods
    function a = Fraction(numer,denom)
       a.denom = denom;
       a.numer = numer;
    end

    function r = mtimes(a,b)
        r = Fraction(a.numer*b.numer,a.denom*b.demon);
    end

    function r = plus(a,b)
        c = a.numer*b.denom+a.denom*b.numer;
        d = a.denom*b.denom;
        r = Fraction(c,d);

    function r = minus(a,b)
        c = a.numer*b.denom-a.denom*b.numer;
        d = a.denom*b.denom;
        r = Fraction(c,d);
    end

    function r = mrdivide(a,b)
        r = Fraction(a.numer*b.denom,a.denom*b.numer);
    end

    function b = reduceFrac(a)
    x = a.numer;
    y = b.denom;
    while y ~= 0
        x = y;
        y = mod(x,y);
    end
    b =Fraction(a.numer/x, a.denom/x)

    end
end

end  

加号运算符起作用,但其他三个运算符不起作用。有人有什么想法吗?另外,我如何将我的方法称为reduceFrac?你知道吗

Fraction.reduceFrac(Fraction(2.4))

我原以为上面的代码可以工作,但事实并非如此。下面是我试图实现的python版本。你知道吗

你知道吗分数.py你知道吗

class Fraction(object):
"""Fraction class


Attributes:
    numer: the numerator of the fraction.

    denom: the denominator of the fraction.
"""

def __init__(self, numer, denom):
     """Initializes the Fraction class

     Sets the inital numer and denom for the
     fraction class.

Args:
    numer: Top number of the Fraction

    denom: Bottom number of the Fraction

Returns:
    None

Raises:
    None
    """
    self.numer = numer
    self.denom = denom

def __str__(self):
    """function call along with the print command

Args:
    None

Returns:
    String: numer / denom. 

Raises:
    None
    """
    return str(self.numer) + '/' + str(self.denom)

def get_numer(self):
    return self.numer

def set_numer(self, numer):
    self.numer = numer

def get_denom(self):
    return self.denom

def set_denom(self, denom):
    self.denom = denom

def __add__(self, other):
    numer = self.numer*other.denom+other.numer*self.denom
    denom = self.denom*other.denom
    return Fraction.reduceFrac(Fraction(numer,denom))

def __div__(self, other):
    numer = self.numer*other.denom
    denom = self.denom*other.numer
    return Fraction.reduceFrac(Fraction(numer,denom))

def __sub__(self, other):
    numer = self.numer*other.denom-other.numer*self.denom
    denom = self.denom*other.denom
    return Fraction.reduceFrac(Fraction(numer,denom))

def __mul__(self, other):
    numer = self.numer*other.numer
    denom = self.denom*other.denom
    return Fraction.reduceFrac(Fraction(numer,denom))

def reduceFrac(self):
    x = self.numer
    y = self.denom
    while y != 0:
        (x, y) = (y, x % y)
    return Fraction(self.numer/x, self.denom/x)


if __name__ == "__main__":
v = Fraction(4,3)
g = Fraction(7,8)
r = Fraction(4,8)

a = v + g
print a

s = v - g
print s

d = v / g
print d

m = v * g
print m

f = Fraction.reduceFrac(r)
print f

Tags: oftheselfnonereturndeffunctionclass

热门问题