我想计算二次曲线上的一个点.将它与HTML5的canvas元素一起使用.
当我quadraticCurveTo()在JavaScript中使用该函数时,我有一个源点,一个目标点和一个控制点.
我怎么能计算出创建的二次曲线上的一个点,让我们说t=0.5"只"知道这三点?
我在2D中有三个点,我想绘制一条穿过它们的二次贝塞尔曲线.如何计算中间控制点(x1和y1quadTo一样)?我知道大学的线性代数但需要一些简单的帮助.
如何计算中间控制点以使曲线也通过它?
我有以下线性回归:
import statsmodels.formula.api as sm
model = sm.ols(formula = 'a ~ b + c', data = data).fit()
Run Code Online (Sandbox Code Playgroud)
我想在这个模型中为b添加二次项.
使用statsmodels.ols有一个简单的方法吗?我应该使用更好的包来实现这个目标吗?
这是我的样本数据.我想在一个情节中绘制两个y1和y2反对x1的情节.这就是我做的:
library(ISLR)
library(ggplot2)
y1<-scale(Auto$horsepower,scale = T,center=T)
y2<-scale(Auto$weight,scale = T,center=T)
x1<-Auto$mpg
df<-data.frame(y1,y2,x1)
p<-ggplot(df,aes(x=x1)) +
geom_point(aes(y = y1), shape = 16) +
geom_point(aes(y = y2), shape = 2)
Run Code Online (Sandbox Code Playgroud)
我想为y1和y2插入一条二次线对x.我这样做了:
p + stat_smooth(method = "lm", formula = y ~ x + I(x^2), size = 1)
Run Code Online (Sandbox Code Playgroud)
它引发了一个错误:
Warning message:
Computation failed in `stat_smooth()`:
variable lengths differ (found for 'x')
Run Code Online (Sandbox Code Playgroud)
除此之外,该stat_smooth命令只能将一个二次线,而我需要两个二次线都y1和y2.
我是如何在R中实现这一目标的?
谢谢
我找到的唯一Google搜索结果是QuadProg ++但它无法解决其矩阵不适用于Cholesky分解的二次规划问题.
那么有人能给我一些关于其他图书馆的建议吗?谢谢.
最终我需要能够将生成的形状转换为SVG,但我很乐意处理到/从另一个库或坐标系的转换.我正在寻找的是如何进行计算.
假设形状是以二次方式绘制的四边形状,其中每个边可以是凹的或凸的,但没有边缘与其他边缘或它们自身重叠,并且四个边中的任何一个都可以是弯曲的.
对于四边形多边形(具有直边的形状是微不足道的)的相同方法,并且如果两个相对边是直线,则很容易找到交叉点,因为它们将沿着在相对边的细分之间绘制的直线放置.从那里可以相对容易地计算将它们连接到沿着替代轴的前一点所需的曲线:
然而,当没有两个直的相对的边(如上面的第三个例子中)时,我不确定如何找到这些点,因为不再有直线点的确定性.
我花了很长时间寻找有记录的方法,但无济于事.
下面是一个使用SVG来描述它的起始形状的例子(它不必在SVG中处理,只要我可以输出到SVG.
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 406.4 233.4" xml:space="preserve">
<path class="st0" d="M394.3,232.7c-106-37.8-353.7,0-353.7,0s-90.4-151.2,0-207.3s353.7,0,353.7,0S420.3,154.7,394.3,232.7z"/>
</svg>
Run Code Online (Sandbox Code Playgroud)
编辑:我在Stack Exchange Maths上提出了类似的问题,其中一个答案描述了一种方法 - 使用Coons Patch.Quora解释在这里.
我试图做一个简单的二次函数,通过枚举返回根数及其值:
enum QuadraticResult {
None,
OneRoot(f32),
TwoRoots(f32, f32),
}
fn solveQuadratic(a: f32, b: f32, c: f32) -> QuadraticResult {
let delta = b * b - 4.0 * a * c;
match delta {
< 0 => return QuadraticResult::None,
> 0 => return QuadraticResult::TwoRoots(0.0, 1.0),
_ => return QuadraticResult::OneRoot(0.0),
}
}
Run Code Online (Sandbox Code Playgroud)
这不会编译,因为它抱怨'<'和'>'.有没有办法实现这个match或我需要使用if
这是一个有趣的谜题.
下面是一个R片段,它标识二次函数相对于从y轴上的点(0,rf)绘制的直线的相切点.
对于熟悉投资组合理论的人来说,这一点是回报和风险空间,解决方案是一组权重,用于定义相切投资组合(最大锐度比).该片段允许负权重(即短路),并且存在一个等权重约束,其要求权重之和= 1.
require(quadprog)
# create artifical data
nO <- 100 # number of observations
nA <- 10 # number of assets
mData <- array(rnorm(nO * nA, mean = 0.001, sd = 0.01), dim = c(nO, nA))
rf <- 0.0001 # riskfree rate (2.5% pa)
mu <- apply(mData, 2, mean) # means
mu2 <- mu - rf # excess means
# qp
aMat <- as.matrix(mu2)
bVec <- 1 # set expectation of portfolio excess return to 1 …Run Code Online (Sandbox Code Playgroud) optimization r linear-algebra mathematical-optimization quadratic
我试图使用solve.QP来解决投资组合优化问题(二次问题)
共3项资产
有4个限制:
Dmat是协方差矩阵
Dmat <- matrix(c(356.25808, 12.31581, 261.8830, 212.31581, 27.24840, 18.50515, 261.88302, 18.50515,535.45960), nrow=3, ncol=3)
Run Code Online (Sandbox Code Playgroud)
dvec是每项资产的预期回报
dvec <- matrix(c(9.33, 3.33, 9.07), nrow=3, ncol=1)
Run Code Online (Sandbox Code Playgroud)
Amat是约束矩阵
A.Equality <- matrix(c(1,1,1), ncol=1)
Amat <- cbind(A.Equality, dvec, diag(3), -diag(3))
Run Code Online (Sandbox Code Playgroud)
约束A ^ T b> = b_0,b向量
bvec <- c(1, 5.2, rep(0, 3), rep(-0.5, 3))
Run Code Online (Sandbox Code Playgroud)
meq = 2,因为有两个相等约束,第一和第二约束是相等的
然后我运行函数solve.QP
library(quadprog)
qp <- solve.QP(Dmat, dvec, Amat, bvec, meq=2)
Run Code Online (Sandbox Code Playgroud)
但它给出了错误
Error in solve.QP(Dmat, dvec, Amat, bvec, meq = 2) : constraints are inconsistent, no …Run Code Online (Sandbox Code Playgroud) 我必须为二次类写一个读方法,其中以ax ^ 2 + bx + c的形式输入二次方.该课程的描述如下:
添加一个读取方法,询问用户标准格式的方程式并正确设置三个实例变量.(因此,如果用户键入3x ^ 2 - x,则将实例变量设置为3,-1和0).这将需要您之前完成的字符串处理.显示按原样输入的实际方程式并正确标记为预期输出.
我能够通过使用字符串操作和if else语句来完成ax ^ 2部分.但我不知道如何处理方程的bx和c部分,因为可能在bx和c前面的符号.这是我如何做ax ^ 2方法的一部分.
public void read()
{
Scanner keyboard = new Scanner(System.in);
System.out.println("Please enter a quadratic equation in standard format.");
String formula = keyboard.next();
String a = formula.substring(0, formula.indexOf("x^2"));
int a2 = Integer.parseInt(a);
if (a2 == 0)
{
System.out.println("a = 0");
}
else if (a2 == 1)
{
System.out.println("a = 1");
}
else
{
System.out.println("a = " + a2);
}
}
Run Code Online (Sandbox Code Playgroud)
随意编写任何代码作为示例.任何帮助将不胜感激.
quadratic ×10
math ×4
r ×3
curve ×2
bezier ×1
c++ ×1
cubic-bezier ×1
ggplot2 ×1
grid ×1
java ×1
javascript ×1
match ×1
optimization ×1
point ×1
portfolio ×1
python ×1
regression ×1
rust ×1
statsmodels ×1
svg ×1