x = power(a , (n -1)>>1);

甚么意思啊??

power(a,n-1) 我知道是甚么意思。。后面那个    >>1  何解??

可以考虑使用一个 switch 语句,根据用户输入的函数类型来选择具体的函数计算方法。以下是改进后的代码: ``` void MainWindow::drawFunction() { QString expression = ui->expressionEdit->text(); if (expression.isEmpty()) { return; } QCustomPlot *plot = ui->plotWidget; plot->addGraph(); plot->graph()->setPen(QPen(Qt::blue)); plot->graph()->setName(expression); double xMin = -10, xMax = 10, yMin = -10, yMax = 10; plot->xAxis->setRange(xMin, xMax); plot->yAxis->setRange(yMin, yMax); QVector<double> xValues, yValues; for (double x = xMin; x <= xMax; x += 0.1) { double y = 0.0; switch (getFunctionType(expression)) { case FunctionType::Linear: y = calculateLinear(expression, x); break; case FunctionType::Power: y = calculatePower(expression, x); break; case FunctionType::Logarithmic: y = calculateLogarithmic(expression, x); break; case FunctionType::Exponential: y = calculateExponential(expression, x); break; case FunctionType::Trigonometric: y = calculateTrigonometric(expression, x); break; default: break; } xValues.append(x); yValues.append(y); } plot->graph()->setData(xValues, yValues); plot->replot(); } void MainWindow::clearPlot() { QCustomPlot *plot = ui->plotWidget; plot->clearGraphs(); plot->replot(); } MainWindow::FunctionType MainWindow::getFunctionType(const QString &expression) { // 根据函数表达式判断函数类型 if (expression.contains("x")) { if (expression.contains("^")) { return FunctionType::Power; } else if (expression.contains("log")) { return FunctionType::Logarithmic; } else if (expression.contains("exp")) { return FunctionType::Exponential; } else if (expression.contains("sin") || expression.contains("cos") || expression.contains("tan")) { return FunctionType::Trigonometric; } else { return FunctionType::Linear; } } else { return FunctionType::Unknown; } } double MainWindow::calculateLinear(const QString &expression, double x) { // 计算一元一次函数 QRegExp rx("(\\d*[.]?\\d*)\\s*\\*?\\s*x\\s*([+\\-]\\s*\\d*[.]?\\d*)?"); if (rx.indexIn(expression) != -1) { double a = rx.cap(1).toDouble(); double b = rx.cap(2).toDouble(); return a * x + b; } else { return 0.0; } } double MainWindow::calculatePower(const QString &expression, double x) { // 计算幂函数 QRegExp rx("(\\d*[.]?\\d*)\\s*\\*?\\s*x\\s*\\^\\s*(\\d*[.]?\\d*)"); if (rx.indexIn(expression) != -1) { double a = rx.cap(1).toDouble(); double n = rx.cap(2).toDouble(); return pow(a * x, n); } else { return 0.0; } } double MainWindow::calculateLogarithmic(const QString &expression, double x) { // 计算对数函数 if (expression.startsWith("log")) { double base = 10.0; QString baseStr = expression.mid(3); if (!baseStr.isEmpty()) { base = baseStr.toDouble(); } return log(x) / log(base); } else { return 0.0; } } double MainWindow::calculateExponential(const QString &expression, double x) { // 计算指数函数 if (expression.startsWith("exp")) { return exp(x); } else { return 0.0; } } double MainWindow::calculateTrigonometric(const QString &expression, double x) { // 计算三角函数 if (expression.startsWith("sin")) { return sin(x); } else if (expression.startsWith("cos")) { return cos(x); } else if (expression.startsWith("tan")) { return tan(x); } else { return 0.0; } } ``` 其中,`getFunctionType` 函数用于根据用户输入的函数表达式判断函数类型,`calculateLinear`、`calculatePower`、`calculateLogarithmic`、`calculateExponential` 和 `calculateTrigonometric` 分别用于计算一元一次函数、幂函数、对数函数、指数函数和三角函数。在 `drawFunction` 函数中,通过 switch 语句来选择具体的计算方法,并将计算结果添加到 `xValues` 和 `yValues` 中。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值