解题报告_18.5.26_POJ_1039_0

本文介绍了一种用于计算光线穿过管道时最远可见点位置的算法。该算法利用了叉积运算来判断光线与管道壁是否相交,并通过精确的交点计算确定光线的最大穿透距离。此外,还详细解释了如何通过枚举上、下折点来寻找能够完全贯穿管道的光线。

转载自:https://blog.youkuaiyun.com/lyy289065406/article/details/6648585

#include<iostream>  
#include<cmath>  
#include<iomanip>  
using namespace std;  
  
const double precision=1e-3;   //精度限制  
const double inf=99999.0;   //正无穷,注意下面使用的是负无穷  
  
typedef class Node    //折点坐标  
{  
public:  
    double x;  
    double y;  
}point;  
  
int max(int a,int b)  
{  
    return a>b?a:b;  
}  
  
/*把浮点p的值转化为0,1或-1  (精度讨论)*/  
  
int dblcmp(double p)  
{  
    if(fabs(p)<precision)    // fabs()  浮点数的绝对值  
        return 0;       //只要是在0的邻域,就认为是0  
  
    return p>0?1:-1;  
}  
  
/*叉积运算*/  
  
double det(double x1,double y1,double x2,double y2)  
{  
    return x1*y2-x2*y1;  
}  
  
/*计算P点在AB的左侧还是右侧(AC与AB的螺旋关系)*/  
  
double cross(point A,point B,point P)  
{  
    return det(B.x-A.x , B.y-A.y , P.x-A.x , P.y-A.y);  
}  
  
/*判断直线AB、CD是否相交*/  
  
bool check(point A,point B,point C,point D)  
{  
    return (dblcmp(cross(A,B,C)) * dblcmp(cross(A,B,D)) <= 0);  
    //这里对黑书P353所述模板的相交约束条件做了修改  
    //目的是允许 入射光线L 与 折点处垂线 不规范相交(即垂线的端点可以落在L上 或者 允许延长线相交)  
}  
  
/*计算直线AB、CD的交点横坐标*/  
//本题这里传参是有讲究的,AB是代表光线L与管道的交点,CD是代表上管壁或者下管壁的端点  
//之所以这样做,是因为AB与CD实质上是不相交的,是AB的延长线与CD相交  
//按照上述传参顺序,根据修改后的模板,那么仅仅判断C、D是否在AB的两侧,就能计算 AB延长线与CD的交点  
//倘若传参顺序错了,就会判断A、B是否在CD的两侧,但是AB一定是在CD同侧的,也就不能求交点了  
  
double intersection(point A,point B,point C,point D)  
{  
    double area1=cross(A,B,C);  
    double area2=cross(A,B,D);  
    int c=dblcmp(area1);  
    int d=dblcmp(area2);  
  
    if(c*d<0) //CD在AB的两侧,规范相交  
        return (area2*C.x - area1*D.x)/(area2-area1);  //黑书P357交点计算公式  
  
    if(c*d==0)   //CD的其中一个端点在AB上,不规范相交  
        if(c==0)  
            return C.x;//C在AB上,返回AB与CD非规范相交时的交点C的横坐标  
        else  
            return D.x;//D在AB上,返回AB与CD非规范相交时的交点D的横坐标  
  
    return -inf;  //CD在AB同侧,无交点,返回 负无穷  
}  
  
int main(int i,int j,int k)  
{  
    int n;    //折点数  
    while(cin>>n)  
    {  
        if(!n)  
            break;  
  
        point* up=new point[n+1];         //上折点  
        point* down=new point[n+1];       //下折点  
  
        double max_x=-inf;  //最大可见度(管中最远可见点的横坐标)  
        /*Input*/  
  
        for(i=1;i<=n;i++)  
        {  
            cin>>up[i].x>>up[i].y;  
            down[i].x=up[i].x;  
            down[i].y=up[i].y-1;  
        }  
  
        bool flag=false;  //标记当前光线L(直线up[i]->down[j])能否贯通全管  
        for(i=1;i<=n;i++) //枚举所有通过一个上折点、一个下折点的直线  
        {  
            for(j=1;j<=n;j++)  
                if(i!=j)  
                {  
                    for(k=1;k<=n;k++)     //直线L最大延伸到第k-1节管子  
                        if(!check(up[i],down[j],up[k],down[k]))   //up[k]->down[k]为折点处垂直x轴的直线  
                            break;  
  
                    if(k>n)  
                    {  
                        flag=true;  
                        break;  
                    }  
                    else if(k>max(i,j))  //由于不清楚L究竟是与第k-1节管子的上管壁还是下管壁相交,因此都计算交点,取最优  
                    {                   //举例:若实际L是与上管壁相交,当计算下管壁时,得到的是第k-1个下折点,并不会是最优  
                                        //反之亦同理   
                        double temp=intersection(up[i],down[j],up[k],up[k-1]);  
                        if(max_x < temp)  //L与第k-1节管子的上管壁相交  
                            max_x=temp;  
  
                        temp=intersection(up[i],down[j],down[k],down[k-1]);  
                        if(max_x < temp)  //L与第k-1节管子的上管壁相交  
                            max_x=temp;  
                    }  
                }  
  
            if(flag)  
                break;  
        }  
  
        if(flag)  
            cout<<"Through all the pipe."<<endl;  
        else  
            cout<<fixed<<setprecision(2)<<max_x<<endl;  
  
        /*Relax Room*/  
  
        delete up,down;  
    }  
    return 0;  
}  

【电力系统】单机无穷大电力系统短路故障暂态稳定Simulink仿真(带说明文档)内容概要:本文档围绕“单机无穷大电力系统短路故障暂态稳定Simulink仿真”展开,提供了完整的仿真模型与说明文档,重点研究电力系统在发生短路故障后的暂态稳定性问题。通过Simulink搭建单机无穷大系统模型,模拟不同类型的短路故障(如三相短路),分析系统在故障期间及切除后的动态响应,包括发电机转子角度、转速、电压和功率等关键参数的变化,进而评估系统的暂态稳定能力。该仿真有助于理解电力系统稳定性机理,掌握暂态过程分析方法。; 适合人群:电气工程及相关专业的本科生、研究生,以及从事电力系统分析、运行与控制工作的科研人员和工程师。; 使用场景及目标:①学习电力系统暂态稳定的基本概念与分析方法;②掌握利用Simulink进行电力系统建模与仿真的技能;③研究短路故障对系统稳定性的影响及提高稳定性的措施(如故障清除时间优化);④辅助课程设计、毕业设计或科研项目中的系统仿真验证。; 阅读建议:建议结合电力系统稳定性理论知识进行学习,先理解仿真模型各模块的功能与参数设置,再运行仿真并仔细分析输出结果,尝试改变故障类型或系统参数以观察其对稳定性的影响,从而深化对暂态稳定问题的理解。
本研究聚焦于运用MATLAB平台,将支持向量机(SVM)应用于数据预测任务,并引入粒子群优化(PSO)算法对模型的关键参数进行自动调优。该研究属于机器学习领域的典型实践,其核心在于利用SVM构建分类模型,同时借助PSO的全局搜索能力,高效确定SVM的最优超参数配置,从而显著增强模型的整体预测效能。 支持向量机作为一种经典的监督学习方法,其基本原理是通过在高维特征空间中构造一个具有最大间隔的决策边界,以实现对样本数据的分类或回归分析。该算法擅长处理小规模样本集、非线性关系以及高维度特征识别问题,其有效性源于通过核函数将原始数据映射至更高维的空间,使得原本复杂的分类问题变得线性可分。 粒子群优化算法是一种模拟鸟群社会行为的群体智能优化技术。在该算法框架下,每个潜在解被视作一个“粒子”,粒子群在解空间中协同搜索,通过不断迭代更新自身速度与位置,并参考个体历史最优解和群体全局最优解的信息,逐步逼近问题的最优解。在本应用中,PSO被专门用于搜寻SVM中影响模型性能的两个关键参数——正则化参数C与核函数参数γ的最优组合。 项目所提供的实现代码涵盖了从数据加载、预处理(如标准化处理)、基础SVM模型构建到PSO优化流程的完整步骤。优化过程会针对不同的核函数(例如线性核、多项式核及径向基函数核等)进行参数寻优,并系统评估优化前后模型性能的差异。性能对比通常基于准确率、精确率、召回率及F1分数等多项分类指标展开,从而定量验证PSO算法在提升SVM模型分类能力方面的实际效果。 本研究通过一个具体的MATLAB实现案例,旨在演示如何将全局优化算法与机器学习模型相结合,以解决模型参数选择这一关键问题。通过此实践,研究者不仅能够深入理解SVM的工作原理,还能掌握利用智能优化技术提升模型泛化性能的有效方法,这对于机器学习在实际问题中的应用具有重要的参考价值。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值